diff options
| author | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
|---|---|---|
| committer | Ethan Morgan <ethan@gweithio.com> | 2026-02-14 16:44:06 +0000 |
| commit | 54409423f767d8b1cf30cb7d0efca6b4ca138823 (patch) | |
| tree | d915ac7828703ce4b963efdd9728a1777ba18c1e /vcpkg/scripts | |
Diffstat (limited to 'vcpkg/scripts')
650 files changed, 35447 insertions, 0 deletions
diff --git a/vcpkg/scripts/addPoshVcpkgToPowershellProfile.ps1 b/vcpkg/scripts/addPoshVcpkgToPowershellProfile.ps1 new file mode 100644 index 0000000..8dedc3d --- /dev/null +++ b/vcpkg/scripts/addPoshVcpkgToPowershellProfile.ps1 @@ -0,0 +1,271 @@ +[CmdletBinding()] +param() + +function findExistingImportModuleDirectives([Parameter(Mandatory=$true)][string]$path) +{ + if (!(Test-Path $path)) + { + return + } + + $fileContents = Get-Content $path + $fileContents -match 'Import-Module.+?(?=posh-vcpkg)' + return +} + +$scriptsDir = split-path -parent $script:MyInvocation.MyCommand.Definition + +$profileEntry = "Import-Module '$scriptsDir\posh-vcpkg'" +$profilePath = $PROFILE # Implicit PowerShell variable +$profileDir = Split-Path $profilePath -Parent +if (!(Test-Path $profileDir)) +{ + New-Item -ItemType Directory -Path $profileDir | Out-Null +} + +Write-Host "`nAdding the following line to ${profilePath}:" +Write-Host " $profileEntry" + +# @() Needed to force Array in PowerShell 2.0 +[Array]$existingImports = @(findExistingImportModuleDirectives $profilePath) +if ($existingImports.Count -gt 0) +{ + $existingImportsOut = $existingImports -join "`n " + Write-Host "`nposh-vcpkg is already imported to your PowerShell profile. The following entries were found:" + Write-Host " $existingImportsOut" + Write-Host "`nPlease make sure you have started a new PowerShell window for the changes to take effect." + return +} + +# Modifying the profile will invalidate any signatures. +# Posh-git does the following check, so we should too. +# https://github.com/dahlbyk/posh-git/blob/master/src/Utils.ps1 +# If the profile script exists and is signed, then we should not modify it +if (Test-Path $profilePath) +{ + $sig = Get-AuthenticodeSignature $profilePath + if ($null -ne $sig.SignerCertificate) + { + Write-Warning "Skipping add of posh-vcpkg import to profile; '$profilePath' appears to be signed." + Write-Warning "Please manually add the line '$profileEntry' to your profile and resign it." + return + } +} + +Add-Content $profilePath -Value "`n$profileEntry" -Encoding UTF8 +Write-Host "`nSuccessfully added posh-vcpkg to your PowerShell profile. Please start a new PowerShell window for the changes to take effect." +
+# SIG # Begin signature block
+# MIIntwYJKoZIhvcNAQcCoIInqDCCJ6QCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAQI5pjINs39W5V
+# cJzzNG3YZ5LACp5BEUv+jJq20JhbqKCCDYEwggX/MIID56ADAgECAhMzAAACUosz
+# qviV8znbAAAAAAJSMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjEwOTAyMTgzMjU5WhcNMjIwOTAxMTgzMjU5WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQDQ5M+Ps/X7BNuv5B/0I6uoDwj0NJOo1KrVQqO7ggRXccklyTrWL4xMShjIou2I
+# sbYnF67wXzVAq5Om4oe+LfzSDOzjcb6ms00gBo0OQaqwQ1BijyJ7NvDf80I1fW9O
+# L76Kt0Wpc2zrGhzcHdb7upPrvxvSNNUvxK3sgw7YTt31410vpEp8yfBEl/hd8ZzA
+# v47DCgJ5j1zm295s1RVZHNp6MoiQFVOECm4AwK2l28i+YER1JO4IplTH44uvzX9o
+# RnJHaMvWzZEpozPy4jNO2DDqbcNs4zh7AWMhE1PWFVA+CHI/En5nASvCvLmuR/t8
+# q4bc8XR8QIZJQSp+2U6m2ldNAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUNZJaEUGL2Guwt7ZOAu4efEYXedEw
+# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1
+# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDY3NTk3MB8GA1UdIwQYMBaAFEhu
+# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu
+# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w
+# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3
+# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx
+# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAFkk3
+# uSxkTEBh1NtAl7BivIEsAWdgX1qZ+EdZMYbQKasY6IhSLXRMxF1B3OKdR9K/kccp
+# kvNcGl8D7YyYS4mhCUMBR+VLrg3f8PUj38A9V5aiY2/Jok7WZFOAmjPRNNGnyeg7
+# l0lTiThFqE+2aOs6+heegqAdelGgNJKRHLWRuhGKuLIw5lkgx9Ky+QvZrn/Ddi8u
+# TIgWKp+MGG8xY6PBvvjgt9jQShlnPrZ3UY8Bvwy6rynhXBaV0V0TTL0gEx7eh/K1
+# o8Miaru6s/7FyqOLeUS4vTHh9TgBL5DtxCYurXbSBVtL1Fj44+Od/6cmC9mmvrti
+# yG709Y3Rd3YdJj2f3GJq7Y7KdWq0QYhatKhBeg4fxjhg0yut2g6aM1mxjNPrE48z
+# 6HWCNGu9gMK5ZudldRw4a45Z06Aoktof0CqOyTErvq0YjoE4Xpa0+87T/PVUXNqf
+# 7Y+qSU7+9LtLQuMYR4w3cSPjuNusvLf9gBnch5RqM7kaDtYWDgLyB42EfsxeMqwK
+# WwA+TVi0HrWRqfSx2olbE56hJcEkMjOSKz3sRuupFCX3UroyYf52L+2iVTrda8XW
+# esPG62Mnn3T8AuLfzeJFuAbfOSERx7IFZO92UPoXE1uEjL5skl1yTZB3MubgOA4F
+# 8KoRNhviFAEST+nG8c8uIsbZeb08SeYQMqjVEmkwggd6MIIFYqADAgECAgphDpDS
+# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK
+# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
+# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0
+# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla
+# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS
+# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT
+# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB
+# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG
+# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S
+# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz
+# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7
+# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u
+# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33
+# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl
+# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP
+# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB
+# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF
+# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM
+# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ
+# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud
+# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO
+# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0
+# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
+# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p
+# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y
+# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB
+# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw
+# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA
+# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY
+# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj
+# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd
+# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ
+# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf
+# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ
+# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j
+# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B
+# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96
+# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7
+# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I
+# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIZjDCCGYgCAQEwgZUwfjELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z
+# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAlKLM6r4lfM52wAAAAACUjAN
+# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor
+# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgFlYOVUKP
+# feFpp2ZyGIN6cbgH7sLzLcNZk6To9Qy5/jkwQgYKKwYBBAGCNwIBDDE0MDKgFIAS
+# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN
+# BgkqhkiG9w0BAQEFAASCAQASfzadUptMi09w6TyqkqH2acAq4SQ7IRAUsfgo9VZU
+# keZ0yk54zc2JhMq2EdD9BodoqWUHty/Kd/ii54KlaIilcg1eu7fxI23ApMDqRyd5
+# pej24Gi7fpx/kOPedQMRITZj+2DLBWWxlGnlSqLJ88HOhQ7IUPK6n0orv6o3aoW+
+# vmIz1KVf/WpQ0Bmnuf6KvidtlXwq9Z6F6t78v3ulfFhl/rQkar/kqwKh9h2rfTbO
+# NL52WccwEzk1uk/7jRY3biG7vegymoFHVgGqHirscNa0XeGXt+GgqAXo/ppXDxFW
+# U/9CUSV3oQt+H+4YHoKEuTpNpJ+nRDyz84l4emm5PwWXoYIXFjCCFxIGCisGAQQB
+# gjcDAwExghcCMIIW/gYJKoZIhvcNAQcCoIIW7zCCFusCAQMxDzANBglghkgBZQME
+# AgEFADCCAVkGCyqGSIb3DQEJEAEEoIIBSASCAUQwggFAAgEBBgorBgEEAYRZCgMB
+# MDEwDQYJYIZIAWUDBAIBBQAEIAufT8fqkLAoNnmK8tlDtjF5YfpJIAKOXej3J0eq
+# YJSlAgZiF5g+l2EYEzIwMjIwMzMwMjE1MjEwLjY3NVowBIACAfSggdikgdUwgdIx
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1p
+# Y3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhh
+# bGVzIFRTUyBFU046RDA4Mi00QkZELUVFQkExJTAjBgNVBAMTHE1pY3Jvc29mdCBU
+# aW1lLVN0YW1wIFNlcnZpY2WgghFlMIIHFDCCBPygAwIBAgITMwAAAY/zUajrWnLd
+# zAABAAABjzANBgkqhkiG9w0BAQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
+# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
+# IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
+# MjAxMDAeFw0yMTEwMjgxOTI3NDZaFw0yMzAxMjYxOTI3NDZaMIHSMQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg
+# SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg
+# RVNOOkQwODItNEJGRC1FRUJBMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt
+# cCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAmVc+/rXP
+# Fx6Fk4+CpLrubDrLTa3QuAHRVXuy+zsxXwkogkT0a+XWuBabwHyqj8RRiZQQvdvb
+# Oq5NRExOeHiaCtkUsQ02ESAe9Cz+loBNtsfCq846u3otWHCJlqkvDrSr7mMBqwcR
+# Y7cfhAGfLvlpMSojoAnk7Rej+jcJnYxIeN34F3h9JwANY360oGYCIS7pLOosWV+b
+# xug9uiTZYE/XclyYNF6XdzZ/zD/4U5pxT4MZQmzBGvDs+8cDdA/stZfj/ry+i0XU
+# YNFPhuqc+UKkwm/XNHB+CDsGQl+ZS0GcbUUun4VPThHJm6mRAwL5y8zptWEIocbT
+# eRSTmZnUa2iYH2EOBV7eCjx0Sdb6kLc1xdFRckDeQGR4J1yFyybuZsUP8x0dOsEE
+# oLQuOhuKlDLQEg7D6ZxmZJnS8B03ewk/SpVLqsb66U2qyF4BwDt1uZkjEZ7finIo
+# UgSz4B7fWLYIeO2OCYxIE0XvwsVop9PvTXTZtGPzzmHU753GarKyuM6oa/qaTzYv
+# rAfUb7KYhvVQKxGUPkL9+eKiM7G0qenJCFrXzZPwRWoccAR33PhNEuuzzKZFJ4De
+# aTCLg/8uK0Q4QjFRef5n4H+2KQIEibZ7zIeBX3jgsrICbzzSm0QX3SRVmZH//Aqp
+# 8YxkwcoI1WCBizv84z9eqwRBdQ4HYcNbQMMCAwEAAaOCATYwggEyMB0GA1UdDgQW
+# BBTzBuZ0a65JzuKhzoWb25f7NyNxvDAfBgNVHSMEGDAWgBSfpxVdAF5iXYP05dJl
+# pxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENBJTIwMjAx
+# MCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRwOi8vd3d3
+# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRpbWUtU3Rh
+# bXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBMGA1UdJQQMMAoG
+# CCsGAQUFBwMIMA0GCSqGSIb3DQEBCwUAA4ICAQDNf9Oo9zyhC5n1jC8iU7NJY39F
+# izjhxZwJbJY/Ytwn63plMlTSaBperan566fuRojGJSv3EwZs+RruOU2T/ZRDx4VH
+# esLHtclE8GmMM1qTMaZPL8I2FrRmf5Oop4GqcxNdNECBClVZmn0KzFdPMqRa5/0R
+# 6CmgqJh0muvImikgHubvohsavPEyyHQa94HD4/LNKd/YIaCKKPz9SA5fAa4phQ4E
+# vz2auY9SUluId5MK9H5cjWVwBxCvYAD+1CW9z7GshJlNjqBvWtKO6J0Aemfg6z28
+# g7qc7G/tCtrlH4/y27y+stuwWXNvwdsSd1lvB4M63AuMl9Yp6au/XFknGzJPF6n/
+# uWR6JhQvzh40ILgeThLmYhf8z+aDb4r2OBLG1P2B6aCTW2YQkt7TpUnzI0cKGr21
+# 3CbKtGk/OOIHSsDOxasmeGJ+FiUJCiV15wh3aZT/VT/PkL9E4hDBAwGt49G88gSC
+# O0x9jfdDZWdWGbELXlSmA3EP4eTYq7RrolY04G8fGtF0pzuZu43A29zaI9lIr5ul
+# KRz8EoQHU6cu0PxUw0B9H8cAkvQxaMumRZ/4fCbqNb4TcPkPcWOI24QYlvpbtT9p
+# 31flYElmc5wjGplAky/nkJcT0HZENXenxWtPvt4gcoqppeJPA3S/1D57KL3667ep
+# Ir0yV290E2otZbAW8DCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUw
+# DQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
+# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
+# YXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhv
+# cml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
+# ggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg
+# 4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aO
+# RmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41
+# JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5
+# LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pGve2krnopN6zL
+# 64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9
+# QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYrbqgSUei/BQOj
+# 0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqE
+# UUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0
+# kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435
+# UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQABo4IB
+# 3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTE
+# mr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwG
+# A1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93
+# d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNV
+# HSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNV
+# HQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo
+# 0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29m
+# dC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5j
+# cmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jv
+# c29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDAN
+# BgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4
+# sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN3Zi6th54
+# 2DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRX
+# ud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBew
+# VIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0
+# DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDFNLB62FD+Cljd
+# QDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFr
+# DZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdUCbFpAUR+fKFh
+# bHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7n
+# tdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRbatGePu1+
+# oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6Fw
+# ZvKhggLUMIICPQIBATCCAQChgdikgdUwgdIxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
+# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
+# ZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RDA4Mi00QkZE
+# LUVFQkExJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2WiIwoB
+# ATAHBgUrDgMCGgMVAD5NL4IEdudIBwdGoCaV0WBbQZpqoIGDMIGApH4wfDELMAkG
+# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
+# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwDQYJKoZIhvcNAQEFBQACBQDl7ubRMCIY
+# DzIwMjIwMzMwMjIyNTIxWhgPMjAyMjAzMzEyMjI1MjFaMHQwOgYKKwYBBAGEWQoE
+# ATEsMCowCgIFAOXu5tECAQAwBwIBAAICCl0wBwIBAAICET4wCgIFAOXwOFECAQAw
+# NgYKKwYBBAGEWQoEAjEoMCYwDAYKKwYBBAGEWQoDAqAKMAgCAQACAwehIKEKMAgC
+# AQACAwGGoDANBgkqhkiG9w0BAQUFAAOBgQBjidsY/frY7jVCC5L43gm9MoaMnxjT
+# 8gVLXcdbhJzGYftD84JlTWvw/WyGSHpoeg+oCe01IIgdTicq0MKjxoca+LefqaS8
+# vlAf9s1JdIa2Je7u5CzOt2Gru9C00znmx6hI8XCkV+Gj+ZopC4kESoaSGiyaqt+S
+# YZHTJ1hNVg79dTGCBA0wggQJAgEBMIGTMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
+# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
+# ZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBD
+# QSAyMDEwAhMzAAABj/NRqOtact3MAAEAAAGPMA0GCWCGSAFlAwQCAQUAoIIBSjAa
+# BgkqhkiG9w0BCQMxDQYLKoZIhvcNAQkQAQQwLwYJKoZIhvcNAQkEMSIEIH26YOfE
+# UVgRTz6SOkQa9frVJcK+7EUHy9BNy3DCqIG2MIH6BgsqhkiG9w0BCRACLzGB6jCB
+# 5zCB5DCBvQQgl3IFT+LGxguVjiKm22ItmO6dFDWW8nShu6O6g8yFxx8wgZgwgYCk
+# fjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQD
+# Ex1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAY/zUajrWnLdzAAB
+# AAABjzAiBCB0UdAt+5LFhsYAoTd2lnVnE0JExPii63XeZzU2N7NElDANBgkqhkiG
+# 9w0BAQsFAASCAgCSm1motOpztHnppo7OFCG/NumEpmOgH4Ma58pjV7mgxfoLQllg
+# lLpGzBwlXfHSdOLg/q0ip6REZrSnvPw3rffeLl7oTgfAnUZTyGCQbXZgYKmHyqBN
+# ys7PaaULzR4UrsyhJ+lEQwY3aombMshmo/rwolFsgUCauvCpVPiPhpHy8+2Wqm4r
+# 9Xj1X7H9THSzFJmD3Qu6bT9yburwrSZNEtnYybO+SYYgzjy3CiTfAUag/iETGj4k
+# C5K3dfxuz6qWfe0Qr3bT7sLlA0FjQn3ZSNyjPqHr3/1Uf2S6VYKipYvdvLezbJ8X
+# 9SE5QUJPc+WWHDMd7LW+EEak/CF/N+I77bHuMN1iyiG7DRGIbOge3jKtD9XgBb25
+# N2+4ilsoN3GYe63bMGsL+525ApITbcnhxbpd35UiZP6Nw9ab9WKYIUILI4vdjSyx
+# LX+HZZV1cpqU4d5HjPS9exHgDS6RwJvYtvx9N0moBJYz8X+C4HDJKO6EAFY1i8tT
+# HKu3TGsqofehtTtlc9QCEimSTBSmeGxEiPmSDjwfaO2erTzwnJcZL5UqDNHoEouN
+# Z5+u1f2LfIidCBznb4tRlG9GNe1JKF3bp16tsNwD6GFuKfcDaP8/+ee14qzHPUJm
+# niaVz5RlKUh2M0Uphl+hmnHzIWHOjhUQsUSaoyXy0n+Wz01P1TJ+CBiA1w==
+# SIG # End signature block
diff --git a/vcpkg/scripts/angle/maintainer-notes.md b/vcpkg/scripts/angle/maintainer-notes.md new file mode 100644 index 0000000..16d9367 --- /dev/null +++ b/vcpkg/scripts/angle/maintainer-notes.md @@ -0,0 +1,32 @@ +# The ANGLE vcpkg port + +The ANGLE port's buildsystem is based off of [WebKit's approach](https://github.com/WebKit/WebKit/tree/main/Source/ThirdParty/ANGLE) to converting ANGLE's buildsystem to CMake. + +Details: + +- `cmake-buildsystem/CMakeLists.txt` + - This is an augmented version of WebKit's [CMakeLists.txt](https://github.com/WebKit/WebKit/blob/main/Source/ThirdParty/ANGLE/CMakeLists.txt), with vcpkg edits and additions. +- `cmake-buildsystem/*.cmake` + - These are configuration files based on [WebKit's approach](https://github.com/WebKit/WebKit/tree/main/Source/ThirdParty/ANGLE), but customized for vcpkg (and using `PlatformLinux` instead of `PlatformGTK`) + + +## Updating the ANGLE vcpkg port + +1. Select a new ANGLE version + +Recommendation: Follow the recommendations in the libANGLE "[Choosing an ANGLE branch](https://github.com/google/angle/blob/master/doc/ChoosingANGLEBranch.md#matching-a-chromium-release-to-an-angle-branch)" guide, and find the branch that matches the current Chromium Stable. + +2. [Find the branch](https://github.com/google/angle/branches) (usually `chromium/<version>`) and latest commit on that branch, and update the following variables in `portfile.cmake`: + - `ANGLE_COMMIT` + - `ANGLE_VERSION` + - `ANGLE_SHA512` + +3. Check the `DEPS` file at that ANGLE commit, for the commit used in `'third_party/zlib'`, and update `ANGLE_THIRDPARTY_ZLIB_COMMIT` in `portfile.cmake` if necessary. + +4. Attempt to build. You may have to tweak the `CMakeLists.txt`, `Platform*.cmake` files, etc. Check with the latest files in [WebKit's repo](https://github.com/WebKit/WebKit/tree/main/Source/ThirdParty/ANGLE) to see if any updates need to be ported to the vcpkg's custom files. You might also need to change the `ANGLE_WEBKIT_BUILDSYSTEM_COMMIT` in the portfile (although this should theoretically need updating less frequently). + +5. Check headers against `opengl-registry` - make sure headers are similar. +> angle defines some additional entrypoints. +> opengl-registry should be latest before updating angle + +6. Complete all the other normal steps in the [Maintainer Guide](/docs/maintainers/maintainer-guide.md) diff --git a/vcpkg/scripts/azure-pipelines/Create-PRDiff.ps1 b/vcpkg/scripts/azure-pipelines/Create-PRDiff.ps1 new file mode 100644 index 0000000..5991180 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/Create-PRDiff.ps1 @@ -0,0 +1,20 @@ +[CmdletBinding(PositionalBinding=$False)] +Param( + [Parameter(Mandatory=$True)] + [String]$DiffFile +) + +Start-Process -FilePath 'git' -ArgumentList 'diff' ` + -NoNewWindow -Wait ` + -RedirectStandardOutput $DiffFile +if (0 -ne (Get-Item -LiteralPath $DiffFile).Length) +{ + $msg = @( + 'The formatting of the files in the repo were not what we expected,', + 'or the documentation was not regenerated.', + 'Please access the diff from format.diff in the build artifacts,' + 'and apply the patch with `git apply`' + ) + Write-Error ($msg -join "`n") + throw +}
\ No newline at end of file diff --git a/vcpkg/scripts/azure-pipelines/android/Dockerfile b/vcpkg/scripts/azure-pipelines/android/Dockerfile new file mode 100644 index 0000000..03144ab --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/android/Dockerfile @@ -0,0 +1,108 @@ +# syntax=docker/dockerfile:1.4 +# DisableDockerDetector "Used to build the container deployed to Azure Container Registry" +FROM ubuntu:noble-20251001 + +ADD https://packages.microsoft.com/config/ubuntu/24.04/packages-microsoft-prod.deb /packages-microsoft-prod.deb +ADD https://github.com/adoptium/temurin17-binaries/releases/download/jdk-17.0.14+7/OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz /OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz +ADD https://dl.google.com/android/repository/commandlinetools-linux-10406996_latest.zip /sdk-commandlinetools-linux-10406996_latest.zip +ADD https://dl.google.com/android/repository/build-tools_r34-linux.zip /build-tools_r34-linux.zip +ADD https://dl.google.com/android/repository/platform-34-ext7_r03.zip /platform-34-ext7_r03.zip +ADD https://dl.google.com/android/repository/platform-tools_r35.0.1-linux.zip /platform-tools_r35.0.1-linux.zip +ADD https://dl.google.com/android/repository/android-ndk-r28c-linux.zip /android-ndk-r28c-linux.zip + +# Add apt packages + +## vcpkg prerequisites +ENV APT_PACKAGES="git curl zip unzip tar" + +## Common build prereqs +ENV APT_PACKAGES="$APT_PACKAGES g++ vim pkg-config cmake ca-certificates" + +ENV APT_PACKAGES="$APT_PACKAGES autoconf nasm bison flex build-essential libtool libtool-bin libltdl-dev gettext automake autoconf-archive" + +## Python related +ENV APT_PACKAGES="$APT_PACKAGES python3-setuptools python3-pip python3-venv python3-mako python3-jinja2" + +## at-spi2-atk +ENV APT_PACKAGES="$APT_PACKAGES libxtst-dev" + +## freeglut +ENV APT_PACKAGES="$APT_PACKAGES libxi-dev libgl1-mesa-dev libglu1-mesa-dev mesa-common-dev libxrandr-dev libxxf86vm-dev" + +# glfw3 +ENV APT_PACKAGES="$APT_PACKAGES libxinerama-dev libxcursor-dev" + +# qt5-base +ENV APT_PACKAGES="$APT_PACKAGES libxext-dev libxfixes-dev libxrender-dev \ + libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-util0-dev \ + libxkbcommon-dev libxcb-keysyms1-dev \ + libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \ + libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev \ + libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev \ + libxcb-cursor-dev libxkbcommon-x11-dev libsm6 libsm-dev" + +## PowerShell +ENV APT_PACKAGES="$APT_PACKAGES powershell azcopy" + +# The BUILD_DATE argument forces cache invalidation so we get updated apt dependencies +ARG BUILD_DATE +RUN echo "Build date: ${BUILD_DATE}" + +RUN <<END_OF_SCRIPT bash +set -e + +export DEBIAN_FRONTEND=noninteractive + +# Apt prereqs itself +apt-get -y update +apt-get -y --no-install-recommends install ca-certificates + +# Add apt repos + +## PowerShell +dpkg -i packages-microsoft-prod.deb +rm -f packages-microsoft-prod.deb + +# Run apt things +apt-get -y update +apt-get -y dist-upgrade + +apt-get -y --no-install-recommends install $APT_PACKAGES + +# OpenJDK +tar xzf OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz +rm OpenJDK17U-jdk_x64_linux_hotspot_17.0.14_7.tar.gz + +# Android SDK +unzip -q sdk-commandlinetools-linux-10406996_latest.zip -d android-sdk +rm sdk-commandlinetools-linux-10406996_latest.zip + +unzip -q build-tools_r34-linux.zip -d android-sdk/build-tools +mv android-sdk/build-tools/android-14 android-sdk/build-tools/34.0.0 +rm build-tools_r34-linux.zip + +unzip -q platform-34-ext7_r03.zip -d android-sdk/platforms +rm platform-34-ext7_r03.zip +find android-sdk/platforms -type d -exec chmod o+rx '{}' ';' +find android-sdk/platforms -type f -exec chmod o+r '{}' ';' + +unzip -q platform-tools_r35.0.1-linux.zip -d android-sdk +rm platform-tools_r35.0.1-linux.zip + +# JRE for sdk setup +export JAVA_HOME=/jdk-17.0.14+7 +yes | /android-sdk/cmdline-tools/bin/sdkmanager --sdk_root=/android-sdk --licenses + +# Android NDK +unzip -q /android-ndk-r28c-linux.zip +rm -f android-ndk-r28c-linux.zip + +END_OF_SCRIPT + +ENV JAVA_HOME /jdk-17.0.14+7 + +ENV ANDROID_HOME /android-sdk + +ENV ANDROID_NDK_HOME /android-ndk-r28c + +WORKDIR /vcpkg diff --git a/vcpkg/scripts/azure-pipelines/android/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/android/azure-pipelines.yml new file mode 100644 index 0000000..7cc5656 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/android/azure-pipelines.yml @@ -0,0 +1,147 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: PrAzureLinux3Docker + timeoutInMinutes: 1440 # 1 day + variables: + - name: WORKING_ROOT + value: /mnt/vcpkg-ci + - name: VCPKG_DOWNLOADS + value: /mnt/vcpkg-ci/downloads + - name: ANDROID_NDK_HOME + value: /android-ndk-r28c + - name: ANDROID_DOCKER_IMAGE + value: 'vcpkgandroidwus.azurecr.io/vcpkg-android:2025-10-16' + - name: LINUX_DOCKER_IMAGE + value: 'vcpkgandroidwus.azurecr.io/vcpkg-linux:2025-10-16' + steps: + # Note: /mnt is the Azure machines' temporary disk. + - bash: | + sudo mkdir /home/agent -m=777 + sudo chown `id -u` /home/agent + sudo mkdir ${{ variables.WORKING_ROOT }} -m=777 + sudo rm -rf ${{ variables.WORKING_ROOT }}/failure-logs + sudo mkdir ${{ variables.WORKING_ROOT }}/failure-logs -m=777 + sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} -m=777 + # Move the docker layers to the temp disk. + sudo mkdir -p /etc/docker + echo '{"data-root": "/mnt/docker"}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + exit 0 + displayName: 'Create working directories' + - bash: ./bootstrap-vcpkg.sh -skipDependencyChecks + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - task: AzureCLI@2 + displayName: 'Build vcpkg with CMake' + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + # This is a second pull but the vcpkgToolSha setting is used rarely. + USER=$(id --user) + az acr login --name vcpkgandroidwus + docker pull ${{ variables.LINUX_DOCKER_IMAGE }} + docker run --init -i --rm \ + -a stderr \ + -a stdout \ + --user $USER \ + --mount type=bind,source=$(Build.Repository.LocalPath),target=/vcpkg \ + --workdir /vcpkg \ + ${{ variables.LINUX_DOCKER_IMAGE }} \ + /vcpkg/scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: bash + scriptLocation: 'inlineScript' # Be very very careful that the exit code from the last pwsh is reported correctly + inlineScript: | + end=`date -u -d "2 days" '+%Y-%m-%dT%H:%MZ'` + assetSas=`az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv` + binarySas=`az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv` + echo Minting SAS tokens valid through $end + echo "##vso[task.setvariable variable=BCACHE_SAS_TOKEN;issecret=true]$binarySas" + USER=$(id --user) + az acr login --name vcpkgandroidwus + docker pull ${{ variables.ANDROID_DOCKER_IMAGE }} + docker run --init -i --rm \ + -a stderr \ + -a stdout \ + --user $USER \ + --mount type=bind,source=$(Build.Repository.LocalPath),target=/vcpkg \ + --mount type=bind,source=$(WORKING_ROOT)/failure-logs,target=/vcpkg/failure-logs \ + --mount type=bind,source=/mnt/vcpkg-ci,target=/mnt/vcpkg-ci \ + --env X_VCPKG_ASSET_SOURCES="x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" \ + --env ANDROID_NDK_HOME="${{ variables.ANDROID_NDK_HOME }}" \ + --workdir /vcpkg \ + ${{ variables.ANDROID_DOCKER_IMAGE }} \ + pwsh \ + -File scripts/azure-pipelines/test-modified-ports.ps1 \ + -Triplet ${{ replace(parameters.jobName, '_', '-') }} \ + -BuildReason $(Build.Reason) \ + -BinarySourceStub "x-azcopy-sas,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" \ + -WorkingRoot ${{ variables.WORKING_ROOT }} + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/azcopy-logs' + artifactName: "z azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['AZCOPY_LOGS_EMPTY'], 'True') + - task: UseNode@1 + displayName: 'Ensure Node.js is available' + condition: always() + inputs: + version: '22.x' + - bash: | + cd scripts/azure-pipelines/owners-db && npm ci || true + if [ "$(Build.Reason)" = "PullRequest" ]; then + echo "Running file_script_from_cache for PR" + npx --yes ts-node ./file_script_from_cache.ts --pr-hashes "$(Build.Repository.LocalPath)/pr-hashes.json" --blob-base-url "https://vcpkgbinarycachewus.blob.core.windows.net/cache?${BCACHE_SAS_TOKEN}" --target-branch "origin/master" --out-dir ../../list_files + else + echo "Running file_script for CI" + npx --yes ts-node ./file_script.ts --info-dir /mnt/vcpkg-ci/installed/vcpkg/info/ --out-dir ../../list_files + fi + displayName: 'Build a file list for all packages' + condition: always() + env: + BCACHE_SAS_TOKEN: $(BCACHE_SAS_TOKEN) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} diff --git a/vcpkg/scripts/azure-pipelines/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/azure-pipelines.yml new file mode 100644 index 0000000..d4ea9e5 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/azure-pipelines.yml @@ -0,0 +1,105 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: tripletPattern + displayName: 'Enable triplets which contain this substring (^ matches begin, $ matches end)' + type: string + default: '^' + +jobs: +- template: windows/azure-pipelines.yml + parameters: + jobName: x86_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_release + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_static + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_windows_static_md + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: x64_uwp + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_windows + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_windows_static_md + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: windows/azure-pipelines.yml + parameters: + jobName: arm64_uwp + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: osx/azure-pipelines.yml + parameters: + jobName: x64_osx + poolName: 'PrOsx-2025-09-11' + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: osx/azure-pipelines.yml + parameters: + jobName: arm64_osx + poolName: 'PrOsx-2025-09-11-arm64' + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: linux/azure-pipelines.yml + parameters: + jobName: x64_linux + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: arm_neon_android + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: x64_android + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} + +- template: android/azure-pipelines.yml + parameters: + jobName: arm64_android + vcpkgToolSha: ${{ parameters.vcpkgToolSha }} + tripletPattern: ${{ parameters.tripletPattern }} diff --git a/vcpkg/scripts/azure-pipelines/bootstrap-from-source.sh b/vcpkg/scripts/azure-pipelines/bootstrap-from-source.sh new file mode 100755 index 0000000..d9ee04f --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/bootstrap-from-source.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -e + +git clone --depth 1 https://github.com/microsoft/vcpkg-tool vcpkg-tool +git -C vcpkg-tool fetch --depth 1 origin $1 +git -C vcpkg-tool switch -d FETCH_HEAD +rm -rf build.x64.release +cmake -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=OFF -DVCPKG_WARNINGS_AS_ERRORS=OFF -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=OFF -B build.x64.release -S vcpkg-tool +ninja -C build.x64.release +mv build.x64.release/vcpkg vcpkg diff --git a/vcpkg/scripts/azure-pipelines/create-docker-images.ps1 b/vcpkg/scripts/azure-pipelines/create-docker-images.ps1 new file mode 100644 index 0000000..9f465bf --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/create-docker-images.ps1 @@ -0,0 +1,71 @@ +# Create Docker images for vcpkg + +[CmdletBinding()] +param( + [switch]$OnlyAndroid, + [switch]$OnlyLinux, + [switch]$NoLogout +) + +if ($OnlyAndroid -and $OnlyLinux) { + Write-Error "At most one of {-OnlyAndroid, -OnlyLinux} may be set" + return 1 +} + +if ($OnlyAndroid) { + Write-Host "Only building Android" + $BuildAndroid = $true + $BuildLinux = $false +} elseif ($OnlyLinux) { + Write-Host "Only building Linux" + $BuildAndroid = $false + $BuildLinux = $true +} else { + $BuildAndroid = $true + $BuildLinux = $true +} + +function Build-Image { + param( + $AcrRegistry, + [string]$Location, + [string]$ImageName, + [string]$Date + ) + + Push-Location $Location + try { + $remote = [string]::Format('{0}/{1}:{2}', $AcrRegistry.LoginServer, $ImageName, $Date) + docker build . -t $remote --build-arg BUILD_DATE=$Date + docker push $remote + Write-Host "Remote: $remote" + } finally { + Pop-Location + } +} + +$Date = (Get-Date -Format 'yyyy-MM-dd') +$ResourceGroupName = "PrAnd-WUS" +$ContainerRegistryName = "vcpkgandroidwus" +$ErrorActionPreference = 'Stop' + +$registry = Get-AzContainerRegistry -ResourceGroupName $ResourceGroupName -Name $ContainerRegistryName +Connect-AzContainerRegistry -Name $registry.Name + +if ($BuildAndroid) { + Build-Image -AcrRegistry $registry ` + -Location "$PSScriptRoot/android" ` + -ImageName "vcpkg-android" ` + -Date $Date +} + +if ($BuildLinux) { + Build-Image -AcrRegistry $registry ` + -Location "$PSScriptRoot/linux" ` + -ImageName "vcpkg-linux" ` + -Date $Date +} + +if (-not $NoLogout) { + docker logout $registry.LoginServer +} diff --git a/vcpkg/scripts/azure-pipelines/example-ubuntu-provision-for-docker.sh b/vcpkg/scripts/azure-pipelines/example-ubuntu-provision-for-docker.sh new file mode 100644 index 0000000..ada5445 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/example-ubuntu-provision-for-docker.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# +# This script is to set up the machine for the Docker host. + +# This script is no longer used by official vcpkg testing due to an internal compliance effort +# requiring use of CBL-Mariner. It's still intended to be more or less identical to how the lab +# actually works though; everything meaningful is inside the Docker image; see Dockerfile + +export DEBIAN_FRONTEND=noninteractive + +## Docker +apt-get -y --no-install-recommends install ca-certificates gnupg lsb-release +mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ + $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +apt-get update +apt-get -y --no-install-recommends install docker-ce docker-ce-cli diff --git a/vcpkg/scripts/azure-pipelines/linux/Dockerfile b/vcpkg/scripts/azure-pipelines/linux/Dockerfile new file mode 100644 index 0000000..c07392b --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/linux/Dockerfile @@ -0,0 +1,10 @@ +# syntax=docker/dockerfile:1.4
+# DisableDockerDetector "Used to build the container deployed to Azure Container Registry"
+FROM ubuntu:noble-20251001
+ADD provision-image.sh /provision-image.sh
+RUN apt-get update && \
+ apt-get install --no-install-recommends -y curl gnupg ca-certificates
+# The BUILD_DATE argument forces cache invalidation so we get updated apt dependencies
+ARG BUILD_DATE
+RUN echo "Build date: ${BUILD_DATE}"
+RUN chmod +x /provision-image.sh && /provision-image.sh
diff --git a/vcpkg/scripts/azure-pipelines/linux/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/linux/azure-pipelines.yml new file mode 100644 index 0000000..0da2b03 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/linux/azure-pipelines.yml @@ -0,0 +1,147 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x64_linux' + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: PrAzureLinux3Docker + timeoutInMinutes: 1440 # 1 day + variables: + - name: WORKING_ROOT + value: /mnt/vcpkg-ci + - name: VCPKG_DOWNLOADS + value: /mnt/vcpkg-ci/downloads + - name: LINUX_DOCKER_IMAGE + value: 'vcpkgandroidwus.azurecr.io/vcpkg-linux:2025-10-16' + steps: + # Note: /mnt is the Azure machines' temporary disk. + - bash: | + sudo mkdir /home/agent -m=777 + sudo chown `id -u` /home/agent + sudo mkdir ${{ variables.WORKING_ROOT }} -m=777 + sudo rm -rf ${{ variables.WORKING_ROOT }}/failure-logs + sudo mkdir ${{ variables.WORKING_ROOT }}/failure-logs -m=777 + sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} -m=777 + # Move the docker layers to the temp disk. + sudo mkdir -p /etc/docker + echo '{"data-root": "/mnt/docker"}' | sudo tee /etc/docker/daemon.json + sudo systemctl restart docker + exit 0 + displayName: 'Create working directories' + - bash: ./bootstrap-vcpkg.sh -skipDependencyChecks + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - task: AzureCLI@2 + displayName: 'Build vcpkg with CMake' + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + # This is a second pull but the vcpkgToolSha setting is used rarely. + USER=$(id --user) + az acr login --name vcpkgandroidwus + docker pull ${{ variables.LINUX_DOCKER_IMAGE }} + docker run --init -i --rm \ + -a stderr \ + -a stdout \ + --user $USER \ + --mount type=bind,source=$(Build.Repository.LocalPath),target=/vcpkg \ + --workdir /vcpkg \ + ${{ variables.LINUX_DOCKER_IMAGE }} \ + /vcpkg/scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: bash + scriptLocation: 'inlineScript' # Be very very careful that the exit code from the last pwsh is reported correctly + inlineScript: | + end=`date -u -d "2 days" '+%Y-%m-%dT%H:%MZ'` + assetSas=`az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv` + binarySas=`az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv` + echo Minting SAS tokens valid through $end + # Persist the binary SAS as a secret pipeline variable for the owners-db step + echo "##vso[task.setvariable variable=BCACHE_SAS_TOKEN;issecret=true]$binarySas" + USER=$(id --user) + az acr login --name vcpkgandroidwus + docker pull ${{ variables.LINUX_DOCKER_IMAGE }} + docker run --init -i --rm \ + -a stderr \ + -a stdout \ + --user $USER \ + --mount type=bind,source=$(Build.Repository.LocalPath),target=/vcpkg \ + --mount type=bind,source=$(WORKING_ROOT)/failure-logs,target=/vcpkg/failure-logs \ + --mount type=bind,source=/mnt/vcpkg-ci,target=/mnt/vcpkg-ci \ + --env X_VCPKG_ASSET_SOURCES="x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" \ + --workdir /vcpkg \ + ${{ variables.LINUX_DOCKER_IMAGE }} \ + pwsh \ + -File scripts/azure-pipelines/test-modified-ports.ps1 \ + -Triplet ${{ replace(parameters.jobName, '_', '-') }} \ + -BuildReason $(Build.Reason) \ + -BinarySourceStub "x-azcopy-sas,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" \ + -WorkingRoot ${{ variables.WORKING_ROOT }} + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/azcopy-logs' + artifactName: "z azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['AZCOPY_LOGS_EMPTY'], 'True') + - task: UseNode@1 + displayName: 'Ensure Node.js is available' + condition: always() + inputs: + version: '22.x' + - bash: | + cd scripts/azure-pipelines/owners-db && npm ci || true + # Construct the blob base url using the secret SAS token set earlier + blob="https://vcpkgbinarycachewus.blob.core.windows.net/cache?${BCACHE_SAS_TOKEN}" + if [ "$(Build.Reason)" = "PullRequest" ]; then + echo "Running file_script_from_cache for PR" + npx --yes ts-node ./file_script_from_cache.ts --pr-hashes "$(Build.Repository.LocalPath)/pr-hashes.json" --blob-base-url "$blob" --target-branch "origin/master" --out-dir ../../list_files + else + echo "Running file_script for CI" + npx --yes ts-node ./file_script.ts --info-dir /mnt/vcpkg-ci/installed/vcpkg/info/ --out-dir ../../list_files + fi + displayName: 'Build a file list for all packages' + condition: always() + env: + BCACHE_SAS_TOKEN: $(BCACHE_SAS_TOKEN) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} + configuration: static diff --git a/vcpkg/scripts/azure-pipelines/linux/provision-image.sh b/vcpkg/scripts/azure-pipelines/linux/provision-image.sh new file mode 100755 index 0000000..62daced --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/linux/provision-image.sh @@ -0,0 +1,178 @@ +#!/bin/bash +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +export DEBIAN_FRONTEND=noninteractive + +# Add apt repos + +# Detect Ubuntu VERSION_ID from /etc/os-release (e.g., "24.04") and format to "2404" +UBUNTU_VERSION_ID=$(. /etc/os-release && echo "$VERSION_ID") +NVIDIA_REPO_VERSION=$(echo "$UBUNTU_VERSION_ID" | sed 's/\.//') + +# Apt dependencies; needed for add-apt-repository and curl downloads to work +apt-get -y update +apt-get --no-install-recommends -y install ca-certificates curl apt-transport-https lsb-release gnupg software-properties-common + +## CUDA +curl -L -o /etc/apt/preferences.d/cuda-repository-pin-600 "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/cuda-ubuntu${NVIDIA_REPO_VERSION}.pin" +apt-key adv --fetch-keys "https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/3bf863cc.pub" +add-apt-repository "deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu${NVIDIA_REPO_VERSION}/x86_64/ /" + +## PowerShell +curl -L -o packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/${UBUNTU_VERSION_ID}/packages-microsoft-prod.deb +dpkg -i packages-microsoft-prod.deb +rm -f packages-microsoft-prod.deb +add-apt-repository universe + +## Azure CLI +mkdir -p /etc/apt/keyrings +curl -sLS https://packages.microsoft.com/keys/microsoft.asc | + gpg --dearmor | + tee /etc/apt/keyrings/microsoft.gpg > /dev/null +chmod go+r /etc/apt/keyrings/microsoft.gpg + +AZ_DIST=$(lsb_release -cs) +echo "deb [arch=`dpkg --print-architecture` signed-by=/etc/apt/keyrings/microsoft.gpg] https://packages.microsoft.com/repos/azure-cli/ $AZ_DIST main" | + tee /etc/apt/sources.list.d/azure-cli.list + +apt-get -y update +apt-get -y upgrade + +# Add apt packages + +## vcpkg prerequisites +APT_PACKAGES="git curl zip unzip tar" + +## essentials +APT_PACKAGES="$APT_PACKAGES \ + autoconf autoconf-archive \ + autopoint \ + build-essential \ + cmake \ + gcc g++ gfortran \ + libnuma1 libnuma-dev \ + libtool libtool-bin libltdl-dev \ + libudev-dev \ +" + +## vcpkg_find_acquire_program +APT_PACKAGES="$APT_PACKAGES \ + bison libbison-dev \ + flex \ + gperf \ + nasm \ + ninja-build \ + pkg-config \ + python3 \ + ruby-full \ + swig \ + yasm \ +" + +## mesa and X essentials +APT_PACKAGES="$APT_PACKAGES \ + mesa-common-dev libgl1-mesa-dev libglu1-mesa-dev libgles2-mesa-dev \ + libx11-dev \ + libxaw7-dev \ + libxcursor-dev \ + libxi-dev \ + libxinerama-dev \ + libxkbcommon-x11-dev \ + libxrandr-dev \ + libxt-dev \ + libxxf86vm-dev \ + xutils-dev \ +" + +## required by qt5-base +APT_PACKAGES="$APT_PACKAGES libxext-dev libxfixes-dev libxrender-dev \ + libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxcb-util0-dev" + +## required by qt5-base for qt5-x11extras +APT_PACKAGES="$APT_PACKAGES libxkbcommon-dev libxcb-keysyms1-dev \ + libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev \ + libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev \ + libxcb-render-util0-dev libxcb-xinerama0-dev libxcb-xkb-dev libxcb-xinput-dev" + +## required by xcb feature in qtbase +APT_PACKAGES="$APT_PACKAGES libxcb-cursor-dev" + +## required by libhdfs3 +APT_PACKAGES="$APT_PACKAGES libkrb5-dev" + +## required by kf5windowsystem +APT_PACKAGES="$APT_PACKAGES libxcb-res0-dev" + +## required by kf5globalaccel +APT_PACKAGES="$APT_PACKAGES libxcb-keysyms1-dev libxcb-xkb-dev libxcb-record0-dev" + +## required by mesa +APT_PACKAGES="$APT_PACKAGES python3-setuptools python3-mako libxcb-dri3-dev libxcb-present-dev" + +## required by some packages to install additional python packages +APT_PACKAGES="$APT_PACKAGES python3-pip python3-venv python3-jinja2" + +## required by qtwebengine +APT_PACKAGES="$APT_PACKAGES nodejs" + +## required by qtwayland +APT_PACKAGES="$APT_PACKAGES libwayland-dev" + +## required by all GN projects +APT_PACKAGES="$APT_PACKAGES python-is-python3" + +## required by libctl +APT_PACKAGES="$APT_PACKAGES guile-2.2-dev" + +## required by gtk +APT_PACKAGES="$APT_PACKAGES libxdamage-dev libselinux1-dev" + +## required by at-spi2-atk +APT_PACKAGES="$APT_PACKAGES libxtst-dev" + +## required by boringssl +APT_PACKAGES="$APT_PACKAGES golang-go" + +## required by libdecor and mesa +APT_PACKAGES="$APT_PACKAGES wayland-protocols" + +## required by robotraconteur +APT_PACKAGES="$APT_PACKAGES libbluetooth-dev" + +## required by libmysql +APT_PACKAGES="$APT_PACKAGES libtirpc-dev" + +## CUDA +# The intent is to install everything that does not require an actual GPU, driver, or GUI. +# Intentionally omitted: cuda-demo-suite-12-9 cuda-documentation-12-9 cuda-driver-* +# cuda-gdb-12-9 cuda-gdb-src-12-9 cuda-nsight-* cuda-nvdisasm +# cuda-nvprof cuda-nvprune cuda-profiler-api* cuda-sandbox-* +# cuda-visual-tools-12-9 nvidia-gds-12-9 cuda-nvvp-12-9 +# cuda-toolkit-12-9 cuda-tools-12-9 cuda-command-line-tools-12-9 +# cuda-runtime-12-9 +# All libraries for which there is a -dev suffix included here +# cudnn9-jit-cuda-12-9 : Depends: libcudnn9-jit-dev-cuda-12 (= 9.12.0.46-1) but it is not installable +APT_PACKAGES="$APT_PACKAGES cuda-cccl-12-9 cuda-compat-12-9 cuda-compiler-12-9 cuda-crt-12-9 \ + cuda-cudart-dev-12-9 cuda-cuobjdump-12-9 cuda-cupti-dev-12-9 cuda-cuxxfilt-12-9 \ + cuda-driver-dev-12-9 cuda-libraries-dev-12-9 cuda-minimal-build-12-9 cuda-nvcc-12-9 \ + cuda-nvml-dev-12-9 cuda-nvrtc-dev-12-9 cuda-nvtx-12-9 cuda-nvvm-12-9 cuda-opencl-dev-12-9 \ + cuda-sanitizer-12-9 cuda-toolkit-12-9-config-common cudnn9-cuda-12-9 gds-tools-12-9 \ + libcublas-12-9 libcudnn9-dev-cuda-12 libcufft-dev-12-9 libcurand-dev-12-9 libcusolver-dev-12-9 \ + libcusparse-dev-12-9 libnccl-dev libnpp-dev-12-9 libnvfatbin-dev-12-9 libnvjitlink-dev-12-9 \ + libnvjpeg-dev-12-9" + +## PowerShell + Azure +APT_PACKAGES="$APT_PACKAGES powershell azcopy azure-cli" + +## Additionally required/installed by Azure DevOps Scale Set Agents, skip on WSL +if [[ $(grep microsoft /proc/version) ]]; then +echo "Skipping install of ADO prerequisites on WSL." +else +APT_PACKAGES="$APT_PACKAGES libkrb5-3 zlib1g libicu70 debsums liblttng-ust1" +fi + +apt-get --no-install-recommends -y install $APT_PACKAGES + +az --version diff --git a/vcpkg/scripts/azure-pipelines/osx/README.md b/vcpkg/scripts/azure-pipelines/osx/README.md new file mode 100644 index 0000000..7164f23 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/README.md @@ -0,0 +1,300 @@ +# `vcpkg-eg-mac` VMs + +This is the checklist for what the vcpkg team does when updating the macOS machines in the pool. + +## Creating new base images + +### Prerequisites + +- [ ] A Parallels license for amd64 or [macosvm](https://github.com/s-u/macosvm) allow-listed + by macOS for arm64. Note that the directory 'Parallels' is still used when using `macosvm` + just so that scripts know where to find the VM and friends. +- [ ] An Xcode .xip - you can get this from Apple's developer website, + although you'll need to sign in first: <https://developer.apple.com/downloads> + If you are doing this from a local macos box, you can skip to the "update the macos host" step. +- [ ] An Xcode Command Line Tools installer + +### Instructions (AMD64) + +- [ ] Go to https://dev.azure.com/vcpkg/public/_settings/agentqueues , pick the current osx queue, + and delete one of the agents that are idle. +- [ ] Go to that machine in the KVM. (Passwords are stored as secrets in the CPP_GITHUB\vcpkg\vcpkgmm-passwords key vault) +- [ ] Open the Parallels Control Center, and delete the active VM. +- [ ] Update the macos host +- [ ] Update or install parallels +- [ ] Download the macOS installer from the app store. See https://support.apple.com/en-us/102662 + Note: This portion of the instructions is that which breaks most often depending on what Parallels and macOS are doing. + You might need to use `softwareupdate --fetch-full-installer --full-installer-version 15.6.1` and point Parallels + at that resulting installer in 'Applications' instead. +- [ ] Run parallels, and select that installer you just downloaded. Name the VM "vcpkg-osx-<DATE>", for example "vcpkg-osx-2025-09-11". +- [ ] When creating the VM, customize the hardware to the following: + * 12 processors + * 24000 MB of memory + * 350 GB disk + * Disable sound output + * Disable microphone + * Do not share mac camera +- [ ] Install MacOS like you would on real hardware. + * Set up as new + * Apple ID: 'Set Up Later' / Skip + * Account name: vcpkg + * A very similar password :) + * Don't enable Location Services + * Share crashes with app developers + * Don't enable Ask Siri +- [ ] Install Parallels Tools +- [ ] Restart the VM +- [ ] Set the desktop wallpaper to a fixed color from Settings -> Wallpaper . (This makes the KVM a lot easier to use :) ) +- [ ] Disable automatic updates in the VM: Settings -> General -> Automatic Updates -> Disable them all +- [ ] Enable remote login in System Settings -> General -> Sharing -> Remote Login +- [ ] Update the Azure Agent URI in setup-box.sh to the current version. You can find this by going to the agent pool, selecting "New agent", picking macOS, and copying the link. For example https://download.agent.dev.azure.com/agent/4.261.0/vsts-agent-osx-x64-4.261.0.tar.gz +- [ ] In the guest, set the vcpkg user to be able to use sudo without a password. From a dev machine: + ```sh + scp path/to/Xcode.xip vcpkg@HOSTMACHINE:/Users/vcpkg/Xcode.xip + ssh vcpkg@HOSTMACHINE + rm ~/.ssh/known_hosts + export GUEST_IP=`prlctl list --full | sed -nr 's/^.*running *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/p'` + export SSH_COOKIE=vcpkg@$GUEST_IP + scp Xcode.xip $SSH_COOKIE:/Users/vcpkg/Xcode.xip + ssh $SSH_COOKIE # and then enter the password here + printf 'vcpkg\tALL=(ALL)\tNOPASSWD:\tALL\n' | sudo tee -a '/etc/sudoers.d/vcpkg' + sudo chmod 0440 '/etc/sudoers.d/vcpkg' + sudo mdutil -ad + xip --expand Xcode.xip + sudo mv Xcode.app /Applications/Xcode.app + rm Xcode.xip + exit + ``` +- [ ] Open Xcode from Applications in the guest GUI. Accept the EULA. +- [ ] Update the Azure Agent URI in setup-box.sh to the current version. You can find this by going to the agent pool, selecting "New agent", picking macOS, and copying the link. For example https://download.agent.dev.azure.com/agent/4.261.0/vsts-agent-osx-x64-4.261.0.tar.gz +- [ ] Copy setup-box.sh and the xcode installer renamed to 'clt.dmg' to the host. For example from a dev workstation: + ```sh + scp ./setup-guest.sh vcpkg@HOSTMACHINE:/Users/vcpkg + scp ./setup-box.sh vcpkg@HOSTMACHINE:/Users/vcpkg + scp path/to/console/tools.dmg vcpkg@HOSTMACHINE:/Users/vcpkg/clt.dmg + ssh vcpkg@HOSTMACHINE + chmod +x setup-guest.sh + ./setup-guest.sh + rm setup-guest.sh + rm setup-box.sh + rm clt.dmg + exit + ``` +- [ ] Shut down the VM cleanly. +- [ ] Ensure that there is no host system specific 'hardware' like macOS install .isos attached. +- [ ] Set the VM 'Isolated' +- [ ] Boot and then cleanly shut down the VM. +- [ ] In Parallels control center, right click the VM and select "Prepare for Transfer" +- [ ] In Parallels control center, right click the VM and remove it, but "Keep Files" +- [ ] Copy the packaged VM to Azure Storage, with something like: + ```sh + ssh vcpkg@HOSTMACHINE + brew install azcopy + azcopy copy ~/Parallels/vcpkg-osx-2025-09-11.pvmp "https://vcpkgimageminting.blob.core.windows.net/pvms?<SAS>" + azcopy copy ~/Parallels/vcpkg-osx-2025-09-11.sha256.txt "https://vcpkgimageminting.blob.core.windows.net/pvms?<SAS>" + exit + ``` +- [ ] Go to https://dev.azure.com/vcpkg/public/_settings/agentqueues and create a new self hosted Agent pool named `PrOsx-YYYY-MM-DD` based on the current date. Grant microsoft.vcpkg.ci and microsoft.vcpkg.pr access. +- [ ] Remove the macOS installer from Applications +- [ ] Follow the "Deploying images" steps below for each machine in the fleet. + +### Instructions (ARM64) + +- [ ] Go to https://dev.azure.com/vcpkg/public/_settings/agentqueues , pick the current osx queue, + and delete one of the agents that are idle. +- [ ] Go to that machine in the KVM. (Passwords are stored as secrets in the CPP_GITHUB\vcpkg\vcpkgmm-passwords key vault) +- [ ] Update the macos host +- [ ] (Once only) install `macosvm` to `~` (this tarball is also backed up in our `vcpkg-image-minting` storage account). For example from a dev workstation: + ```sh + ssh vcpkg@HOSTMACHINE + curl -L -o macosvm-0.2-1-arm64-darwin21.tar.gz https://github.com/s-u/macosvm/releases/download/0.2-1/macosvm-0.2-1-arm64-darwin21.tar.gz + tar xvf macosvm-0.2-1-arm64-darwin21.tar.gz + rm macosvm-0.2-1-arm64-darwin21.tar.gz + exit + ``` +- [ ] Download the matching `.ipsw` for the macOS copy to install. See https://mrmacintosh.com/apple-silicon-m1-full-macos-restore-ipsw-firmware-files-database/ ; links there to find the .ipsw. Example: https://updates.cdn-apple.com/2025SummerFCS/fullrestores/093-10809/CFD6DD38-DAF0-40DA-854F-31AAD1294C6F/UniversalMac_15.6.1_24G90_Restore.ipsw +- [ ] Determine the VM name using the form "vcpkg-osx-<date>-arm64", for example "vcpkg-osx-2025-09-11-arm64". +- [ ] Open a terminal and run the following commands to create the VM with vcpkg-osx-2025-09-11-arm64 and UniversalMac_15.6.1_24G90_Restore.ipsw replaced as appropriate. This must be run in the KVM as it uses a GUI: + ```sh + mkdir -p ~/Parallels/vcpkg-osx-2025-09-11-arm64 + cd ~/Parallels/vcpkg-osx-2025-09-11-arm64 + ~/macosvm --disk disk.img,size=500g --aux aux.img -c 8 -r 12g --restore ~/UniversalMac_15.6.1_24G90_Restore.ipsw ./vm.json + ~/macosvm -g ./vm.json + ``` +- [ ] Follow prompts as you would on real hardware. + * Set up as new. + * Account name: vcpkg + * A very similar password + * Do not allow computer account password to be reset with your Apple Account. + * Apple ID: 'Set Up Later' / Skip + * No location services + * Yes send crash reports + * Set up screen time later + * Only download updates automatically +- [ ] Set the desktop wallpaper to a fixed color from Settings -> Wallpaper . (This makes the KVM a lot easier to use :) ) +- [ ] Disable automatic updates in the VM: Settings -> General -> Automatic Updates -> Disable them all +- [ ] Enable remote login in the VM: Settings -> General -> Sharing -> Remote Login +- [ ] Set the vcpkg user to be able to use sudo without a password, and install Xcode. For example from a dev workstation: + ```sh + scp path/to/Xcode.xip vcpkg@HOSTMACHINE:/Users/vcpkg/Xcode.xip + ssh vcpkg@HOSTMACHINE + rm ~/.ssh/known_hosts + scp Xcode.xip vcpkg@vcpkgs-Virtual-Machine.local:/Users/vcpkg/Xcode.xip + ssh vcpkg@vcpkgs-Virtual-Machine.local + printf 'vcpkg\tALL=(ALL)\tNOPASSWD:\tALL\n' | sudo tee -a '/etc/sudoers.d/vcpkg' + sudo chmod 0440 '/etc/sudoers.d/vcpkg' + sudo mdutil -ad + xip --expand Xcode.xip + sudo mv Xcode.app /Applications/Xcode.app + rm Xcode.xip + exit + ``` +- [ ] Open Xcode from Applications in the guest GUI. Uncheck the "code completion model" and accept the EULA. +- [ ] Update the Azure Agent URI in setup-box.sh to the current version. You can find this by going to the agent pool, selecting "New agent", picking macOS, and copying the link. For example https://download.agent.dev.azure.com/agent/4.261.0/vsts-agent-osx-arm64-4.261.0.tar.gz +- [ ] Copy setup-box.sh and the xcode installer renamed to 'clt.dmg' to the host. For example from a dev workstation: + ```sh + scp ./setup-guest.sh vcpkg@HOSTMACHINE:/Users/vcpkg + scp ./setup-box.sh vcpkg@HOSTMACHINE:/Users/vcpkg + scp path/to/console/tools.dmg vcpkg@HOSTMACHINE:/Users/vcpkg/clt.dmg + ssh vcpkg@HOSTMACHINE + chmod +x setup-guest.sh + ./setup-guest.sh + rm setup-guest.sh + rm setup-box.sh + rm clt.dmg + exit + ``` +- [ ] Shut down the VM cleanly. +- [ ] Mint a SAS token to vcpkgimageminting/pvms with read, add, create, write, and list permissions. +- [ ] Package the VM into a tarball. For example from a dev workstation: + ```sh + ssh vcpkg@HOSTMACHINE + cd ~/Parallels + aa archive -d vcpkg-osx-<date>-arm64 -o vcpkg-osx-<date>-arm64.aar -enable-holes + brew install azcopy + azcopy copy vcpkg-osx-<date>-arm64.aar "https://vcpkgimageminting.blob.core.windows.net/pvms?<SAS>" + exit + ``` +- [ ] Go to https://dev.azure.com/vcpkg/public/_settings/agentqueues and create a new self hosted Agent pool named `PrOsx-YYYY-MM-DD-arm64` based on the current date. Grant microsoft.vcpkg.ci and microsoft.vcpkg.pr access. +- [ ] Follow the "Deploying images" steps below for each machine in the fleet. + +## Deploying images + +### Running the VM (AMD64) + +Run these steps on each machine to add to the fleet. Skip steps that were done implicitly above if this machine was used to build a box. + +- [ ] If this machine was used before, delete it from the pool of which it is a member from https://dev.azure.com/vcpkg/public/_settings/agentqueues +- [ ] Log in to the machine using the KVM. +- [ ] Check for software updates in macOS system settings +- [ ] Check for software updates in Parallels' UI +- [ ] Mint a SAS token URI to the box to use from the Azure portal if you don't already have one, and download the VM. (Recommend running this via SSH from domain joined machine due to containing SAS tokens). From a developer machine: + ```sh + ssh vcpkg@HOSTMACHINE + brew install azcopy + cd ~/Parallels + azcopy copy "https://vcpkgimageminting.blob.core.windows.net/pvms/vcpkg-osx-<DATE>.pvmp?<SAS>" . + azcopy copy "https://vcpkgimageminting.blob.core.windows.net/pvms/vcpkg-osx-<DATE>.sha256.txt?<SAS>" . + exit + ``` +- [ ] Open the .pvmp in Parallels, and unpack it. +- [ ] Open the 'Configure' screen for the VM, and under Options -> Startup and Shutdown, set the following: + * Custom + * Start Automatically: When Mac Starts + * Startup View: Headless + * On VM Shutdown: Close Window (this one should already be set) + * On Mac Shutdown: Shut Down + * On Window Close: Keep Running in the Background +- [ ] Under 'More Options': + * Time: Do not sync + * Uncheck 'Update Parallels Tools automatically' +- [ ] Close and restart Parallels Desktop. The VM should start automatically. If it does not, start it. +- [ ] [grab a PAT][] if you don't already have one +- [ ] Copy the guest deploy script to the host, and run it with a first parameter of your PAT. From a developer machine: + ```sh + scp register-guest.sh vcpkg@HOSTMACHINE:/Users/vcpkg/register-guest.sh + ssh vcpkg@HOSTMACHINE + rm .ssh/known_hosts + chmod +x register-guest.sh + ./register-guest.sh PAT GOES HERE + rm register-guest.sh + ``` +- [ ] In the VM, open a terminal on the host and run: + ``` + ssh -i ~/Parallels/*/id_guest vcpkg@`prlctl list --full | sed -nr 's/^.*running *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/p'` + ~/myagent/run.sh + ``` +- [ ] Check that the machine shows up in the pool. +- [ ] Lock the screen on the host. +- [ ] Update the "vcpkg Macs" spreadsheet line for the machine with the new pool. + +[grab a PAT]: #getting-an-azure-pipelines-pat + +### Running the VM (ARM64) + +Run these steps on each machine to add to the fleet. Skip steps that were done implicitly above if this machine was used to build a box. + +- [ ] If this machine was used before, delete it from the pool of which it is a member from https://dev.azure.com/vcpkg/public/_settings/agentqueues +- [ ] Log in to the machine using the KVM. +- [ ] Check for software updates in macOS system settings +- [ ] (Once only) install `macosvm` to `~` (this tarball is also backed up in our `vcpkg-image-minting` storage account). From a developer machine: + ```sh + ssh vcpkg@HOSTMACHINE + curl -L -o macosvm-0.2-1-arm64-darwin21.tar.gz https://github.com/s-u/macosvm/releases/download/0.2-1/macosvm-0.2-1-arm64-darwin21.tar.gz + tar xvf macosvm-0.2-1-arm64-darwin21.tar.gz + rm macosvm-0.2-1-arm64-darwin21.tar.gz + exit + ``` +- [ ] Skip if this is the image building machine. Mint a SAS token URI to the box to use from the Azure portal if you don't already have one, and download the VM. (Recommend running this via SSH from domain joined machine due to containing SAS tokens). From a developer machine: + ```sh + ssh vcpkg@HOSTMACHINE + brew install azcopy + mkdir -p ~/Parallels + cd ~/Parallels + azcopy copy "https://vcpkgimageminting.blob.core.windows.net/pvms/vcpkg-osx-<DATE>-arm64.aar?<SAS>" vcpkg-osx-<DATE>-arm64.aar + aa extract -d vcpkg-osx-<DATE>-arm64 -i ./vcpkg-osx-<DATE>-arm64.aar -enable-holes + exit + ``` +- [ ] Open a separate terminal window on the host and start the VM by running: + ```sh + cd ~/Parallels/vcpkg-osx-<DATE>-arm64 + ~/macosvm ./vm.json + ``` +- [ ] [grab a PAT][] if you don't already have one +- [ ] Copy the guest deploy script to the host, and run it with a first parameter of your PAT. From a developer machine: + ```sh + scp register-guest.sh vcpkg@HOSTMACHINE:/Users/vcpkg/register-guest.sh + ssh vcpkg@HOSTMACHINE + rm .ssh/known_hosts + chmod +x register-guest.sh + ./register-guest.sh PAT GOES HERE + rm register-guest.sh + ``` +- [ ] That will cleanly shut down the VM. In the KVM's terminal, relaunch the VM in ephemeral mode with: + ```sh + ~/macosvm --ephemeral ./vm.json + ``` +- [ ] Open a terminal window on the host and run the agent + ```sh + ssh -i ~/Parallels/*/id_guest vcpkg@vcpkgs-Virtual-Machine.local + ~/myagent/run.sh + ``` +- [ ] Check that the machine shows up in the pool, and lock the vcpkg user on the host. +- [ ] Lock the screen on the host. +- [ ] Update the "vcpkg Macs" spreadsheet line for the machine with the new pool. + +[grab a PAT]: #getting-an-azure-pipelines-pat + +## Getting an Azure Pipelines PAT + +Personal Access Tokens are an important part of this process, +and they are fairly easy to generate. +On ADO, under the correct project (in vcpkg's case, "vcpkg"), +click on the "User Settings" icon, then go to "Personal access tokens". +It is the icon to the left of your user icon, in the top right corner. + +Then, create a new token, give it a name, make sure it expires quickly, +and give it a custom defined scope that includes the +"Agent pools: Read & manage" permission (you'll need to "Show all scopes" +to access this). +You can now copy this token and use it to allow machines to join. diff --git a/vcpkg/scripts/azure-pipelines/osx/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/osx/azure-pipelines.yml new file mode 100644 index 0000000..db31a00 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/azure-pipelines.yml @@ -0,0 +1,109 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x64_osx' + - name: poolName + type: string + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: ${{ parameters.poolName }} + workspace: + clean: resources + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: /Users/vcpkg/Data + - name: VCPKG_DOWNLOADS + value: /Users/vcpkg/Data/downloads + steps: + - bash: | + sudo mdutil -ad || 0 + sudo mkdir ${{ variables.VCPKG_DOWNLOADS }} || 0 + sudo chmod 777 ${{ variables.VCPKG_DOWNLOADS }} || 0 + exit 0 + displayName: 'Create ${{ variables.VCPKG_DOWNLOADS }}' + - bash: ./bootstrap-vcpkg.sh + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - bash: ./scripts/azure-pipelines/bootstrap-from-source.sh ${{ parameters.vcpkgToolSha }} + displayName: "Build vcpkg with CMake" + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + $binarySas = $binarySas.Trim() + # Persist the binary SAS as a secret pipeline variable for the owners-db step + Write-Host "##vso[task.setvariable variable=BCACHE_SAS_TOKEN;issecret=true]$binarySas" + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azcopy-sas,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)/failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/azcopy-logs' + artifactName: "z azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['AZCOPY_LOGS_EMPTY'], 'True') + - task: UseNode@1 + displayName: 'Ensure Node.js is available' + inputs: + version: '22.x' + - bash: | + cd scripts/azure-pipelines/owners-db && npm ci || true + # Construct the blob base url using the secret SAS token set earlier + blob="https://vcpkgbinarycachewus.blob.core.windows.net/cache?${BCACHE_SAS_TOKEN}" + if [ "$(Build.Reason)" = "PullRequest" ]; then + echo "Running file_script_from_cache for PR" + npx --yes ts-node ./file_script_from_cache.ts --pr-hashes "$(Build.ArtifactStagingDirectory)/pr-hashes.json" --blob-base-url "$blob" --target-branch "origin/master" --out-dir ../../list_files + else + echo "Running file_script for CI" + npx --yes ts-node ./file_script.ts --info-dir /Users/vcpkg/Data/installed/vcpkg/info/ --out-dir ../../list_files + fi + displayName: 'Build a file list for all packages' + condition: always() + env: + BCACHE_SAS_TOKEN: $(BCACHE_SAS_TOKEN) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} + configuration: static diff --git a/vcpkg/scripts/azure-pipelines/osx/register-guest.sh b/vcpkg/scripts/azure-pipelines/osx/register-guest.sh new file mode 100644 index 0000000..f714e45 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/register-guest.sh @@ -0,0 +1,23 @@ +#!/bin/sh +if [ -z "$1" ]; then + echo "PAT missing" + exit 1 +fi +export AGENT=$(hostname | sed -nr 's/([^.]+).*/\1/p' | tr '[:lower:]' '[:upper:]') +echo "THIS IS AGENT: $AGENT" +if [ `uname -m` = 'arm64' ]; then +export POOL=`echo ~/Parallels/*/ | sed -nr 's/\/Users\/vcpkg\/Parallels\/vcpkg-osx-([0-9]{4}-[0-9]{2}-[0-9]{2})-arm64\/$/PrOsx-\1-arm64/p'` +# on arm64, DNS works +export SSH_COOKIE=vcpkg@vcpkgs-Virtual-Machine.local +else +export POOL=`echo ~/Parallels/*.pvm | sed -nr 's/\/Users\/vcpkg\/Parallels\/vcpkg-osx-([0-9]{4}-[0-9]{2}-[0-9]{2})\.pvm/PrOsx-\1/p'` +# on amd64, DNS does not work, but luckily for us prlctl does know the IP +export GUEST_IP=`prlctl list --full | sed -nr 's/^.*running *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/p'` +export SSH_COOKIE=vcpkg@$GUEST_IP +fi +echo "POOL: $POOL" +echo "SSH_COOKIE: $SSH_COOKIE" +ssh $SSH_COOKIE -o "StrictHostKeyChecking=no" -i ~/Parallels/*/id_guest "~/myagent/config.sh --unattended --url https://dev.azure.com/vcpkg --work ~/Data/work --auth pat --token $1 --pool $POOL --agent $AGENT --replace --acceptTeeEula" +if [ `uname -m` = 'arm64' ]; then + ssh $SSH_COOKIE -o "StrictHostKeyChecking=no" -i ~/Parallels/*/id_guest "sudo shutdown -h now" +fi diff --git a/vcpkg/scripts/azure-pipelines/osx/setup-box.sh b/vcpkg/scripts/azure-pipelines/osx/setup-box.sh new file mode 100644 index 0000000..0dd81e7 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/setup-box.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +hdiutil attach clt.dmg -mountpoint /Volumes/setup-installer +sudo installer -pkg "/Volumes/setup-installer/Command Line Tools.pkg" -target / +hdiutil detach /Volumes/setup-installer +rm clt.dmg +sudo xcode-select -s /Applications/Xcode.app +/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" +if [ `uname -m` = 'arm64' ]; then + (echo; echo 'eval "$(/opt/homebrew/bin/brew shellenv)"') >> /Users/vcpkg/.zprofile + eval "$(/opt/homebrew/bin/brew shellenv)" +else + (echo; echo 'eval "$(/usr/local/bin/brew shellenv)"') >> /Users/vcpkg/.zprofile + eval "$(/usr/local/bin/brew shellenv)" +fi +brew install autoconf-archive autoconf automake azcopy azure-cli bison cmake gettext gfortran gnu-sed gperf gtk-doc libtool meson mono nasm ninja pkg-config powershell python-setuptools texinfo yasm +mkdir ~/Data +if [ `uname -m` = 'arm64' ]; then +curl -s -o ~/Downloads/azure-agent.tar.gz https://download.agent.dev.azure.com/agent/4.261.0/vsts-agent-osx-arm64-4.261.0.tar.gz +else +curl -s -o ~/Downloads/azure-agent.tar.gz https://download.agent.dev.azure.com/agent/4.261.0/vsts-agent-osx-x64-4.261.0.tar.gz +fi +mkdir ~/myagent +tar xf ~/Downloads/azure-agent.tar.gz -C ~/myagent +rm ~/Downloads/azure-agent.tar.gz +rm setup-box.sh diff --git a/vcpkg/scripts/azure-pipelines/osx/setup-guest.sh b/vcpkg/scripts/azure-pipelines/osx/setup-guest.sh new file mode 100644 index 0000000..8efd97d --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/setup-guest.sh @@ -0,0 +1,21 @@ +#!/bin/sh +export VM_DIRECTORY=`ls ~/Parallels | grep vcpkg-osx` +export SSH_KEY="$HOME/Parallels/$VM_DIRECTORY/id_guest" +export SSH_PUBLIC_KEY="$SSH_KEY.pub" +ssh-keygen -P '' -f "$SSH_KEY" +if [ `uname -m` = 'arm64' ]; then +# on arm64, prlctl does not know the IP address, but luckily for us DNS works +export SSH_COOKIE=vcpkg@vcpkgs-Virtual-Machine.local +else +# on amd64, DNS does not work, but luckily for us prlctl does know the IP +export GUEST_IP=`prlctl list --full | sed -nr 's/^.*running *([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}).*/\1/p'` +export SSH_COOKIE=vcpkg@$GUEST_IP +fi +echo Type 'vcpkg' and press enter +ssh-copy-id -i "$SSH_PUBLIC_KEY" $SSH_COOKIE +echo Keys deployed +ssh $SSH_COOKIE -i "$SSH_KEY" echo hello from \`hostname\` +scp -i "$SSH_KEY" ./clt.dmg $SSH_COOKIE:/Users/vcpkg/clt.dmg +scp -i "$SSH_KEY" ./setup-box.sh $SSH_COOKIE:/Users/vcpkg/setup-box.sh +ssh $SSH_COOKIE -i "$SSH_KEY" chmod +x /Users/vcpkg/setup-box.sh +ssh $SSH_COOKIE -i "$SSH_KEY" /Users/vcpkg/setup-box.sh diff --git a/vcpkg/scripts/azure-pipelines/osx/start-parallels-vm.zsh b/vcpkg/scripts/azure-pipelines/osx/start-parallels-vm.zsh new file mode 100644 index 0000000..5e60b2a --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/start-parallels-vm.zsh @@ -0,0 +1,47 @@ +#!/usr/bin/env zsh + +set -e # Exit on any error + +# Find the .pvmp file +PVMP_FILE=$(find ~/Parallels -name "*.pvmp" -type f | head -1) +if [[ -z "$PVMP_FILE" ]]; then + echo "Error: No .pvmp file found in ~/Parallels" + exit 1 +fi + +echo "Found PVMP file: $PVMP_FILE" + +# Attach the PVMP file +echo "Registering PVMP file..." +/usr/local/bin/prlctl register "$PVMP_FILE" + +VM_NAME=$(/usr/local/bin/prlctl list --all --output name --no-header | head -1) + +if [[ -z "$VM_NAME" ]]; then + echo "Error: Failed to register PVMP file or extract VM ID" + exit 1 +fi + +echo "VM registered with ID: $VM_NAME" + +# Unpack the VM +echo "Unpacking VM..." +/usr/local/bin/prlctl unpack "$VM_NAME" + +# Configure startup and shutdown settings +echo "Configuring VM startup and shutdown settings..." +/usr/local/bin/prlctl set "$VM_NAME" --startup-view headless +/usr/local/bin/prlctl set "$VM_NAME" --autostart start-host +/usr/local/bin/prlctl set "$VM_NAME" --autostop shutdown +/usr/local/bin/prlctl set "$VM_NAME" --on-shutdown close +/usr/local/bin/prlctl set "$VM_NAME" --on-window-close keep-running + +echo "VM startup and shutdown settings configured successfully" + +# Display current VM configuration for verification +echo "Current VM configuration:" +/usr/local/bin/prlctl list "$VM_NAME" --info | grep -E "(Autostart|Autostop|Startup view|On shutdown|On window close)" + +echo "Parallels VM setup completed successfully!" +echo "VM ID: $VM_NAME" + diff --git a/vcpkg/scripts/azure-pipelines/osx/stop-delete-all-vms.zsh b/vcpkg/scripts/azure-pipelines/osx/stop-delete-all-vms.zsh new file mode 100644 index 0000000..1eb6fef --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/osx/stop-delete-all-vms.zsh @@ -0,0 +1,17 @@ +#!/usr/bin/env zsh + +vm_name=$(/usr/local/bin/prlctl list --all --output name --no-header 2>/dev/null | head -1) +if [[ -z "$vm_name" ]]; then + echo "No VM found on the system." + exit 0 +fi + +echo "Found VM: $vm_name" + +# Stop the VM if it's running +echo "Stopping VM..." +/usr/local/bin/prlctl stop "$vm_name" --kill 2>/dev/null || echo "VM was already stopped or failed to stop" + +# Delete the VM +echo "Deleting VM..." +/usr/local/bin/prlctl delete "$vm_name"
\ No newline at end of file diff --git a/vcpkg/scripts/azure-pipelines/owners-db/README.md b/vcpkg/scripts/azure-pipelines/owners-db/README.md new file mode 100644 index 0000000..023058e --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/owners-db/README.md @@ -0,0 +1,96 @@ +Owners DB helpers +================= + +Summary +------- +This directory contains two small Node.js CLI helpers used by the Azure Pipelines owners-db step to build two plain-text database files used by downstream tooling: + +- `file_script.ts` — builds databases from a local `info` directory (used in CI runs where vcpkg is installed locally). +- `file_script_from_cache.ts` — builds databases by downloading package ZIPs from a binary cache (used in PR runs that can consult prebuilt artifacts). + +Both scripts produce the same output file formats described below: + +- `VCPKGDatabase.txt` — a newline-separated list of entries of the form `port:triplet:/path/inside/package`. +- `VCPKGHeadersDatabase.txt` — a newline-separated list of entries of the form `port:triplet:relative/header/path` + +These files are emitted to `--out-dir` (default `scripts/list_files`). + +Usage +----- + +file_script.ts (local info-dir mode) + +```text +file_script.ts --info-dir <path-to-info-dir> [--out-dir <path>] +``` + +Behavior and input format: + +- `--info-dir <path>` should point at a directory containing vcpkg-generated `.list` files (the same layout created by `vcpkg` under `installed/<triplet>/vcpkg/info/`). +- Each file in that directory is expected to follow the filename convention used by vcpkg info files. The script parses the filename by splitting on underscores and constructs a package identifier using the first and third components: + + <package>_<...>_<triplet>.list --> package id = `<package>:<triplet>` + +- Each `.list` file is plain text with one relative file path per line. Lines that are empty, or which end in `/` are ignored. If a line contains any prefix before a `/`, the script strips the prefix and uses only the path starting at the first `/`. + +Examples of lines processed from `.list` files: + +- `share/zlib/include/zlib.h` -> entry `zlib:x64-windows:/share/zlib/include/zlib.h` +- `someprefix/share/zlib/include/zlib.h` -> same as above (prefix before first `/` is dropped) + +file_script_from_cache.ts (PR cache mode) + +```text +file_script_from_cache.ts --pr-hashes <pr-hashes.json> --blob-base-url <blob-base-url> [--target-branch <branch>] [--out-dir <path>] +``` + +Required inputs: + +- `--pr-hashes <pr-hashes.json>` is a JSON file produced by the vcpkg tooling that lists changed ports and their ABIs. The script expects a top-level JSON array of objects where each object contains at least the following fields: + + { + "name": "<port-name>", + "triplet": "<triplet>", + "state": "<state>", + "abi": "<sha>" + } + + Important: in this script the `abi` field is expected to be the 64-hex SHA string used to name the ZIP blob in the binary cache (the script validates `abi` against `/^[a-f0-9]{64}$/`). + +- `--blob-base-url <blob-base-url>` should be a URL that points to a binary cache container and include any required SAS token (for example: `https://<account>.blob.core.windows.net/cache?<sas>`). The script will insert `/<sha>.zip` into that base URL to download the package ZIP for each port/abi pair and then enumerate files inside each ZIP. + +Output file formats +------------------- + +Both scripts write two files into the chosen `--out-dir` (default `scripts/list_files`): + +- `VCPKGDatabase.txt` + - Each line has the form: `<port>:<triplet>:<filepath>` + - `<filepath>` begins with a leading `/` when sourced from `.list` files or ZIP entries; it is the path inside the package (for example `/share/zlib/include/zlib.h`). + +- `VCPKGHeadersDatabase.txt` + - Each line has the form: `<port>:<triplet>:<relative/header/path>` + - Only files whose path starts with `/include/` are recorded here and the `/include/` prefix is removed from the path. For example, an entry for `/include/zlib.h` will produce `zlib:x64-windows:zlib.h`. + +Exit codes and errors +--------------------- + +- Both scripts print an error and exit non-zero on fatal problems (invalid arguments, invalid `pr-hashes.json`, or failed git diff in the cache variant). +- `file_script_from_cache.ts` will attempt to download each expected ZIP; failures to download or process a single package are reported as warnings and the script continues — missing entries will simply be absent from the output. + +Examples +-------- + +Local info-dir: + +```sh +npx ts-node ./file_script.ts --info-dir /mnt/vcpkg-ci/installed/vcpkg/info --out-dir ./scripts/list_files +``` + +PR cache mode (pipeline example using `BCACHE_SAS_TOKEN` set as a secret variable): + +```sh +# pipeline constructs the URL from the secret token and passes it to the script +blob="https://vcpkgbinarycachewus.blob.core.windows.net/cache?${BCACHE_SAS_TOKEN}" +npx --yes ts-node ./file_script_from_cache.ts --pr-hashes /path/to/pr-hashes.json --blob-base-url "$blob" --target-branch origin/master --out-dir ./scripts/list_files +``` diff --git a/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts b/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts new file mode 100644 index 0000000..abb79dc --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/owners-db/file_script.ts @@ -0,0 +1,93 @@ +#!/usr/bin/env node +import * as fs from "fs"; +import * as path from "path"; + +const include_subpath = "/include/"; + +function getFiles(dirPath: string): string[] { + const files = fs.readdirSync(dirPath); + return files.filter((f) => !f.startsWith(".")); +} + +function genAllFileStrings( + dirPath: string, + files: string[], + headersStream: fs.WriteStream, + outputStream: fs.WriteStream +) { + for (const file of files) { + const components = file.split("_"); + const pkg = components[0] + ":" + components[2].replace(".list", ""); + const content = fs.readFileSync(path.join(dirPath, file), "utf8"); + const lines = content.split(/\r?\n/); + for (const raw of lines) { + if (!raw) continue; + const line = raw.trim(); + if (line.length === 0) continue; + if (line.endsWith("/")) continue; + // Remove the leading triplet directory + const idx = line.indexOf("/"); + const filepath = idx >= 0 ? line.substring(idx) : line; + outputStream.write(pkg + ":" + filepath + "\n"); + if (filepath.startsWith(include_subpath)) { + headersStream.write(pkg + ":" + filepath.substring(include_subpath.length) + "\n"); + } + } + } +} + +function usage() { + console.error("Usage: file_script.ts --info-dir <path-to-info-dir> [--out-dir <path>]"); +} + +function parseArgs(argv: string[]) { + let infoDir: string | undefined; + let outDir = "scripts/list_files"; + for (let i = 0; i < argv.length; i++) { + const a = argv[i]; + if (a === "--info-dir") { + i++; + infoDir = argv[i]; + } else if (a === "--out-dir") { + i++; + outDir = argv[i]; + } else if (a.startsWith("--")) { + console.error(`Unknown argument: ${a}`); + usage(); + process.exit(2); + } else { + console.error(`Unexpected positional argument: ${a}`); + usage(); + process.exit(2); + } + } + if (!infoDir) { + console.error("info-dir is required"); + usage(); + process.exit(2); + } + return { infoDir, outDir }; +} + +function main() { + const { infoDir: dir, outDir } = parseArgs(process.argv.slice(2)); + try { + fs.mkdirSync(outDir, { recursive: true }); + } catch { + // ignore + } + + const headersPath = path.join(outDir, "VCPKGHeadersDatabase.txt"); + const dbPath = path.join(outDir, "VCPKGDatabase.txt"); + const headers = fs.createWriteStream(headersPath, { encoding: "utf8" }); + const output = fs.createWriteStream(dbPath, { encoding: "utf8" }); + try { + const files = getFiles(dir); + genAllFileStrings(dir, files, headers, output); + } finally { + headers.end(); + output.end(); + } +} + +main(); diff --git a/vcpkg/scripts/azure-pipelines/owners-db/file_script_from_cache.ts b/vcpkg/scripts/azure-pipelines/owners-db/file_script_from_cache.ts new file mode 100644 index 0000000..7b91c1f --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/owners-db/file_script_from_cache.ts @@ -0,0 +1,184 @@ +#!/usr/bin/env node +import * as fs from "fs"; +import * as path from "path"; +import * as https from "https"; +import AdmZip from "adm-zip"; +import { execSync } from "child_process"; + +const keyword = "/include/"; + +function writeOutputLines(outDir: string, dbLines: string[], headerLines: string[]) { + fs.mkdirSync(outDir, { recursive: true }); + fs.writeFileSync(path.join(outDir, "VCPKGDatabase.txt"), dbLines.join("\n") + (dbLines.length ? "\n" : "")); + fs.writeFileSync(path.join(outDir, "VCPKGHeadersDatabase.txt"), headerLines.join("\n") + (headerLines.length ? "\n" : "")); +} + +function listZipFiles(buffer: Buffer, pkgName: string, dbLines: string[], headerLines: string[]) { + const zip = new AdmZip(buffer); + const entries = zip.getEntries(); + for (const e of entries) { + if (e.isDirectory) continue; + const entryName = "/" + e.entryName.replace(/\\/g, "/"); + if (entryName === "/BUILD_INFO" || entryName === "/CONTROL") continue; + dbLines.push(`${pkgName}:${entryName}`); + if (entryName.startsWith(keyword)) { + headerLines.push(`${pkgName}:${entryName.substring(keyword.length)}`); + } + } +} + +function downloadUrlToBuffer(url: string): Promise<Buffer> { + return new Promise((resolve, reject) => { + https.get(url, (res) => { + if (res.statusCode && res.statusCode >= 400) { + reject(new Error(`HTTP ${res.statusCode} while fetching ${url}`)); + return; + } + const chunks: Buffer[] = []; + res.on("data", (c) => chunks.push(c)); + res.on("end", () => resolve(Buffer.concat(chunks))); + }).on("error", reject); + }); +} + +function usage() { + console.error("Usage: file_script_from_cache.ts --pr-hashes <pr-hashes.json> --blob-base-url <blob-base-url> [--target-branch <branch>] [--out-dir <path>]"); + console.error("blob-base-url should include SAS token (e.g. https://<account>.blob.core.windows.net/<container>/?<sas>)"); +} + +function parseArgs(argv: string[]) { + // supports: --pr-hashes <path> --blob-base-url <url> [--target-branch <branch>] [--out-dir <path>] + // legacy: positional: <pr-hashes> <blob-base-url> [target-branch] + let prHashesPath: string | undefined; + let blobBaseUrl: string | undefined; + let targetBranch = "master"; + let outDir = "scripts/list_files"; + for (let i = 0; i < argv.length; i++) { + const a = argv[i]; + if (a === "--pr-hashes") { + i++; + prHashesPath = argv[i]; + } else if (a === "--blob-base-url") { + i++; + blobBaseUrl = argv[i]; + } else if (a === "--target-branch") { + i++; + targetBranch = argv[i]; + } else if (a === "--out-dir") { + i++; + outDir = argv[i]; + } else if (a.startsWith("--")) { + console.error(`Unknown argument: ${a}`); + usage(); + process.exit(2); + } else if (!prHashesPath) { + prHashesPath = a; + } else if (!blobBaseUrl) { + blobBaseUrl = a.replace(/[\/\\]+$/g, ""); + } else if (targetBranch === "master") { + targetBranch = a; + } else { + console.error(`Unexpected positional argument: ${a}`); + usage(); + process.exit(2); + } + } + if (!prHashesPath || !blobBaseUrl) { + usage(); + process.exit(2); + } + return { prHashesPath, blobBaseUrl, targetBranch, outDir }; +} + +async function main() { + const { prHashesPath, blobBaseUrl, targetBranch, outDir } = parseArgs(process.argv.slice(2)); + + const prHashes = JSON.parse(fs.readFileSync(prHashesPath, "utf8")) as Array<{ name: string; triplet: string; state: string; abi: string }>; + // Expect vcpkg-tool produced format: array of objects + // [ { "name": "zlib", "triplet": "x64-windows", "state": "pass", "abi": "zlib:x64-windows:<sha>" }, ... ] + if (!Array.isArray(prHashes)) { + console.error( + `Invalid pr-hashes.json format: expected a top-level JSON array (vcpkg-tool output).` + ); + process.exit(2); + } + + const dbLines: string[] = []; + const headerLines: string[] = []; + + // Determine list of ports to process from git-diff (only folders under ports/ that changed) + let changedPorts: string[] = []; + try { + const mergebase = execSync(`git merge-base ${targetBranch} HEAD`, { encoding: "utf8" }).trim(); + // Find repository root by locating .vcpkg-root in or above cwd + function findRepoRoot(): string { + let dir = process.cwd(); + while (true) { + if (fs.existsSync(path.join(dir, ".vcpkg-root"))) return dir; + const parent = path.dirname(dir); + if (parent === dir) break; + dir = parent; + } + throw new Error("Could not find .vcpkg-root in or above current working directory"); + } + + const repoRoot = findRepoRoot(); + const diffOut = execSync(`git diff --name-only ${mergebase}...HEAD -- ports/`, { encoding: "utf8", cwd: repoRoot }); + const files = diffOut.split(/\r?\n/).filter((l) => l.length > 0); + const set = new Set<string>(); + for (const f of files) { + const m = f.match(/^ports\/([^\/]+)/); + if (m) set.add(m[1]); + } + changedPorts = Array.from(set); + if (changedPorts.length === 0) { + console.log(`git diff found no changed ports under ports/ for range ${mergebase}...HEAD; exiting.`); + writeOutputLines(outDir, dbLines, headerLines); + return; + } + } catch (e) { + console.error(`git diff failed (${e}); this is fatal in PR cache mode.`); + process.exit(2); + } + + for (const port of changedPorts) { + for (const item of prHashes) { + if (item.name !== port) continue; + // Validate sha format + const sha1Regex = /^[a-f0-9]{64}$/; + if (!sha1Regex.test(item.abi)) { + throw new Error(`Invalid SHA format in pr-hashes.json for port ${port}: ${item.abi}`); + } + const abi = item.abi; + // blob named <sha>.zip + // Ensure we append the ABI path before the SAS query string, i.e.: + // https://.../<container>/<sha>.zip?<sas> + let blobUrl: string; + try { + const u = new URL(blobBaseUrl); + const sas = u.search; // includes leading '?' or empty + // build base path without query and without trailing slash + const baseNoQuery = `${u.origin}${u.pathname.replace(/[\/\\]+$/g, "")}`; + blobUrl = sas ? `${baseNoQuery}/${abi}.zip${sas}` : `${baseNoQuery}/${abi}.zip`; + } catch (e) { + console.error(`Invalid blob base URL provided: ${blobBaseUrl} -- ${e}`); + process.exit(2); + } + console.log(`Downloading ${blobUrl} for port ${port}...`); + try { + const buf = await downloadUrlToBuffer(blobUrl); + listZipFiles(buf, `${port}:${item.triplet}`, dbLines, headerLines); + } catch (err) { + console.warn(`Failed to download or process blob for ${port}: ${err}`); + } + } + } + + writeOutputLines(outDir, dbLines, headerLines); + console.log(`Wrote ${path.join(outDir, "VCPKGDatabase.txt")} and ${path.join(outDir, "VCPKGHeadersDatabase.txt")}`); +} + +await main().catch((e) => { + console.error("Error in script:", e); + process.exit(1); +}); diff --git a/vcpkg/scripts/azure-pipelines/owners-db/package-lock.json b/vcpkg/scripts/azure-pipelines/owners-db/package-lock.json new file mode 100644 index 0000000..78139ee --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/owners-db/package-lock.json @@ -0,0 +1,219 @@ +{ + "name": "owners-db", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "owners-db", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "adm-zip": "^0.5.9", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.7" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", + "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + }, + "node_modules/@types/adm-zip": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@types/adm-zip/-/adm-zip-0.5.7.tgz", + "integrity": "sha512-DNEs/QvmyRLurdQPChqq0Md4zGvPwHerAJYWk9l2jCbD1VPpnzRJorOdiq4zsw09NFbYnhfsoEhWtxIzXpn2yw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.5.2.tgz", + "integrity": "sha512-FYxk1I7wPv3K2XBaoyH2cTnocQEu8AOZ60hPbsyukMPLv5/5qr7V1i8PLHdl6Zf87I+xZXFvPCXYjiTFq+YSDQ==", + "dependencies": { + "undici-types": "~7.12.0" + } + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/adm-zip": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", + "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "engines": { + "node": ">=12.0" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + }, + "node_modules/ts-node": { + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", + "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/undici-types": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.12.0.tgz", + "integrity": "sha512-goOacqME2GYyOZZfb5Lgtu+1IDmAlAEu5xnD3+xTzS10hT0vzpf0SPjkXwAw9Jm+4n/mQGDP3LO8CPbYROeBfQ==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/vcpkg/scripts/azure-pipelines/owners-db/package.json b/vcpkg/scripts/azure-pipelines/owners-db/package.json new file mode 100644 index 0000000..abfeda0 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/owners-db/package.json @@ -0,0 +1,19 @@ +{ + "name": "owners-db", + "version": "1.0.0", + "description": "Utility to generate VCPKG file lists (TypeScript)", + "private": true, + "type": "module", + "license": "MIT", + "engines": { + "node": ">=22" + }, + "dependencies": { + "adm-zip": "^0.5.9", + "ts-node": "^10.9.1", + "typescript": "^4.9.5" + }, + "devDependencies": { + "@types/adm-zip": "^0.5.7" + } +} diff --git a/vcpkg/scripts/azure-pipelines/patch-tuesday-checklist.md b/vcpkg/scripts/azure-pipelines/patch-tuesday-checklist.md new file mode 100644 index 0000000..c87618c --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/patch-tuesday-checklist.md @@ -0,0 +1,27 @@ +## First time machine setup: +* [ ] Install Azure PowerShell: https://docs.microsoft.com/en-us/powershell/azure/install-az-ps +* [ ] Run `Connect-AzAccount -Subscription CPP_GITHUB` +* [ ] Install Docker + +## Each Patch Tuesday: +* [ ] Check for depends:vm-update PRs and make relevant changes if possible. +* [ ] Check for Service 360 alerts (possibly at https://aka.ms/s360 ?) against the service named + "C++ VCPKG Validation" about vulnerable software we are installing in the VMs and update that. + (Most often PowerShell needs to be updated) +* [ ] Check for any other software for the Windows images we wish to update and make the edits to do + so in `scripts/azure-pipelines/windows` +* [ ] Check for any updates possible to `vcpkg-tools.json`. Note that PowerShell currently uses the + 7.2.x series due to customer reported problems on older Windows with 7.3.x and later. +* [ ] Update the first line of android/Dockerfile with the current 'noble' image according to + https://hub.docker.com/_/ubuntu +* [ ] Update the first line of linux/Dockerfile with the current 'jammy' image according to + https://hub.docker.com/_/ubuntu +* [ ] Run create-docker-images.ps1 +* [ ] Update android/azure-pipelines.yml and linux/azure-pipelines.yml to point to the new docker + images +* [ ] Run windows/create-image.ps1 +* [ ] Submit PR with those changes and merge it. +* [ ] In the Azure portal, mark the newly created image as the 'latest' one. +* [ ] Mint a new macOS base box. (See instructions in `scripts/azure-pipelines/osx/README.md`) +* [ ] Deploy the new base box to all hosts. +* [ ] Update the software on the CTI's machine #1 to match. diff --git a/vcpkg/scripts/azure-pipelines/test-modified-ports.ps1 b/vcpkg/scripts/azure-pipelines/test-modified-ports.ps1 new file mode 100755 index 0000000..49070e5 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/test-modified-ports.ps1 @@ -0,0 +1,279 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Runs the 'Test Modified Ports' part of the vcpkg CI system for all platforms. + +.PARAMETER Triplet +The triplet to test. + +.PARAMETER WorkingRoot +The location used as scratch space for 'installed', 'packages', and 'buildtrees' vcpkg directories. + +.PARAMETER ArtifactStagingDirectory +The Azure Pipelines artifacts directory. If not supplied, defaults to the current directory. + +.PARAMETER ArchivesRoot +Equivalent to '-BinarySourceStub "files,$ArchivesRoot"' + +.PARAMETER BinarySourceStub +The type and parameters of the binary source. Shared across runs of this script. If +this parameter is not set, binary caching will not be used. Example: "files,W:\" + +.PARAMETER BuildReason +The reason Azure Pipelines is running this script. For invocations caused by `PullRequest`, +modified ports are identified by changed hashes with regard to git HEAD~1 (subject to NoParentHashes), +and ports marked as failing in the CI baseline (or which depend on such ports) are skipped. +If BinarySourceStub is set and this parameter is set to a non-empty value other than `PullRequest`, +binary caching will be in write-only mode. + +.PARAMETER NoParentHashes +Indicates to not use parent hashes even for pull requests. + +.PARAMETER AllowUnexpectedPassing +Indicates that 'Passing, remove from fail list' results should not be emitted as failures. (For example, this is used +when using vcpkg to test a prerelease MSVC++ compiler) + +.Parameter KnownFailuresAbiLog +If present, the path to a file containing a list of known ABI failing ABI hashes, typically generated +by the `vcpkg x-check-features` command. +#> + +[CmdletBinding(DefaultParameterSetName="ArchivesRoot")] +Param( + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + [string]$Triplet, + [Parameter(Mandatory = $true)] + [ValidateNotNullOrEmpty()] + $WorkingRoot, + [ValidateNotNullOrEmpty()] + $ArtifactStagingDirectory = '.', + [Parameter(ParameterSetName='ArchivesRoot')] + $ArchivesRoot = $null, + [Parameter(ParameterSetName='BinarySourceStub')] + $BinarySourceStub = $null, + [String]$BuildReason = $null, + [switch]$NoParentHashes = $false, + [switch]$AllowUnexpectedPassing = $false +) + +function Add-ToolchainToTestCMake { + # The vcpkg.cmake toolchain file is not part of ABI hashing, + # but changes must trigger at least some testing. + Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake" + Copy-Item "scripts/buildsystems/vcpkg.cmake" -Destination "scripts/test_ports/cmake-user" +} + +if (-Not ((Test-Path "triplets/$Triplet.cmake") -or (Test-Path "triplets/community/$Triplet.cmake"))) { + Write-Error "Incorrect triplet '$Triplet', please supply a valid triplet." + exit 1 +} + +if ((-Not [string]::IsNullOrWhiteSpace($ArchivesRoot))) { + if ((-Not [string]::IsNullOrWhiteSpace($BinarySourceStub))) { + Write-Error "Only one binary caching setting may be used." + exit 1 + } + + $BinarySourceStub = "files,$ArchivesRoot" +} + +$buildtreesRoot = Join-Path $WorkingRoot 'b' +$installRoot = Join-Path $WorkingRoot 'installed' +$packagesRoot = Join-Path $WorkingRoot 'p' + +$env:AZCOPY_LOG_LOCATION = Join-Path $WorkingRoot 'azcopy-logs' +$env:AZCOPY_JOB_PLAN_LOCATION = Join-Path $WorkingRoot 'azcopy-plans' +if ($Triplet -eq 'x64-osx') { + $env:AZCOPY_BUFFER_GB = 2 + $env:AZCOPY_CONCURRENCY_VALUE = 8 +} +if (!(Test-Path $env:AZCOPY_LOG_LOCATION)) +{ + New-Item -ItemType Directory -Path $env:AZCOPY_LOG_LOCATION | Out-Null +} +Write-Host "AzCopy logs location: $env:AZCOPY_LOG_LOCATION" +Write-Host "##vso[task.setvariable variable=AZCOPY_LOGS_EMPTY]$true" + +$commonArgs = @( + "--x-buildtrees-root=$buildtreesRoot", + "--x-install-root=$installRoot", + "--x-packages-root=$packagesRoot", + "--overlay-ports=scripts/test_ports" +) + +$testFeatures = $false +$cachingArgs = @() +$skipFailuresArgs = @() +if ([string]::IsNullOrWhiteSpace($BinarySourceStub)) { + $cachingArgs = @('--binarysource', 'clear') +} else { + $cachingArgs = @() + $binaryCachingMode = 'readwrite' + if ([string]::IsNullOrWhiteSpace($BuildReason)) { + Write-Host 'Build reason not specified, defaulting to using binary caching in read write mode.' + } + elseif ($BuildReason -eq 'PullRequest') { + Write-Host 'Build reason was Pull Request, using binary caching in read write mode, testing features, skipping failures.' + $skipFailuresArgs = @('--skip-failures') + $testFeatures = $true + } + else { + Write-Host "Build reason was $BuildReason, using binary caching in write only mode." + $binaryCachingMode = 'write' + } + + $cachingArgs += "--binarysource=clear;$BinarySourceStub,$binaryCachingMode" +} + +if ($IsWindows) { + $vcpkgExe = './vcpkg.exe' +} else { + $vcpkgExe = './vcpkg' +} + +if ($Triplet -eq 'x64-windows-release') { + $tripletArg = "--host-triplet=$Triplet" +} else { + $tripletArg = "--triplet=$Triplet" +} + +$failureLogs = Join-Path $ArtifactStagingDirectory 'failure-logs' +$failureLogsArg = "--failure-logs=$failureLogs" +$knownFailuresFromArgs = @() +if ($testFeatures) { + & $vcpkgExe x-ci-clean @commonArgs + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "vcpkg x-ci-clean failed. This is usually an infrastructure problem; trying again may help." + exit $lastLastExitCode + } + + $ciFeatureBaselineFile = "$PSScriptRoot/../ci.feature.baseline.txt" + $ciFeatureBaselineArg = "--ci-feature-baseline=$ciFeatureBaselineFile" + $knownFailingAbisFile = Join-Path $ArtifactStagingDirectory 'failing-abi-log.txt' + $failingAbiLogArg = "--failing-abi-log=$knownFailingAbisFile" + & $vcpkgExe x-test-features --for-merge-with origin/master $tripletArg $failureLogsArg $ciBaselineArg $failingAbiLogArg $ciFeatureBaselineArg @commonArgs @cachingArgs + $lastLastExitCode = $LASTEXITCODE + $azcopyLogsEmpty = ((Get-ChildItem $env:AZCOPY_LOG_LOCATION).Count -eq 0) + Write-Host "##vso[task.setvariable variable=AZCOPY_LOGS_EMPTY]$azcopyLogsEmpty" + if ($lastLastExitCode -ne 0) + { + Write-Host "##vso[task.setvariable variable=FAILURE_LOGS_EMPTY]$false" + Write-Host "##vso[task.logissue type=error]vcpkg feature testing failed; this is usually a bug in one of the features in the port(s) edited in this pull request. See https://github.com/microsoft/vcpkg/discussions/31357 for how to access AZP failure logs." + exit $lastLastExitCode + } + + $knownFailuresFromArgs += "--known-failures-from=$knownFailingAbisFile" +} + +$ciBaselineFile = "$PSScriptRoot/../ci.baseline.txt" +$ciBaselineArg = "--ci-baseline=$ciBaselineFile" +$toolMetadataFile = "$PSScriptRoot/../vcpkg-tool-metadata.txt" + +& $vcpkgExe x-ci-clean @commonArgs +$lastLastExitCode = $LASTEXITCODE +if ($lastLastExitCode -ne 0) +{ + Write-Error "vcpkg x-ci-clean failed. This is usually an infrastructure problem; trying again may help." + exit $lastLastExitCode +} + +if ($IsMacOS) +{ + Write-Host "macOS disk space report:" + & df -h | Where-Object { $_ -match "Avail|/System/Volumes/Data$" } + & du -sh $WorkingRoot +} + +$parentHashesArgs = @() +if (($BuildReason -eq 'PullRequest') -and -not $NoParentHashes) +{ + $headBaseline = Get-Content $ciBaselineFile -Raw + $headTool = Get-Content $toolMetadataFile -Raw + + Write-Host "Comparing with HEAD~1" + & git revert -n -m 1 HEAD | Out-Null + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "git revert -n -m 1 HEAD failed" + exit $lastLastExitCode + } + + $parentBaseline = Get-Content $ciBaselineFile -Raw + $parentTool = Get-Content $toolMetadataFile -Raw + if (($parentBaseline -eq $headBaseline) -and ($parentTool -eq $headTool)) + { + Write-Host "CI baseline unchanged, determining parent hashes" + $parentHashesFile = Join-Path $ArtifactStagingDirectory 'parent-hashes.json' + $parentHashesArgs += "--parent-hashes=$parentHashesFile" + Add-ToolchainToTestCMake + & $vcpkgExe ci $tripletArg --dry-run $ciBaselineArg @commonArgs --no-binarycaching "--output-hashes=$parentHashesFile" + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "Generating parent hashes failed; this is usually an infrastructure problem with vcpkg" + exit $lastLastExitCode + } + } + else + { + Write-Host "Tool or baseline modified, not using parent hashes" + } + + Write-Host "Running CI for HEAD" + & git reset --hard HEAD + $lastLastExitCode = $LASTEXITCODE + if ($lastLastExitCode -ne 0) + { + Write-Error "git reset --hard HEAD failed" + exit $lastLastExitCode + } +} + +$allowUnexpectedPassingArgs = @() +if ($AllowUnexpectedPassing) { + $allowUnexpectedPassingArgs = @('--allow-unexpected-passing') +} + +Add-ToolchainToTestCMake +$xunitFile = Join-Path $ArtifactStagingDirectory "$Triplet-results.xml" +$xunitArg = "--x-xunit=$xunitFile" +$prHashesFile = Join-Path $ArtifactStagingDirectory "pr-hashes.json" +& $vcpkgExe ci ` + $tripletArg ` + $failureLogsArg ` + "--output-hashes=$prHashesFile" ` + $xunitArg ` + $ciBaselineArg ` + @commonArgs ` + @cachingArgs ` + @parentHashesArgs ` + @skipFailuresArgs ` + @knownFailuresFromArgs ` + @allowUnexpectedPassingArgs +$lastLastExitCode = $LASTEXITCODE +$failureLogsEmpty = (-Not (Test-Path $failureLogs) -Or ((Get-ChildItem $failureLogs).Count -eq 0)) +Write-Host "##vso[task.setvariable variable=FAILURE_LOGS_EMPTY]$failureLogsEmpty" +$azcopyLogsEmpty = ((Get-ChildItem $env:AZCOPY_LOG_LOCATION).Count -eq 0) +Write-Host "##vso[task.setvariable variable=AZCOPY_LOGS_EMPTY]$azcopyLogsEmpty" +Write-Host "##vso[task.setvariable variable=XML_RESULTS_FILE]$xunitFile" + +if ($lastLastExitCode -ne 0) +{ + if (-Not $failureLogsEmpty) + { + Write-Host "##vso[task.logissue type=error]vcpkg ci testing failed; this is usually a bug in a port. See https://github.com/microsoft/vcpkg/discussions/31357 for how to access AZP failure logs." + } + else + { + Write-Host "##vso[task.logissue type=error]vcpkg ci testing failed, but no build failure logs were created for this error." + } +} + +exit $lastLastExitCode diff --git a/vcpkg/scripts/azure-pipelines/windows-unstable/README.md b/vcpkg/scripts/azure-pipelines/windows-unstable/README.md new file mode 100644 index 0000000..5dc58f5 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows-unstable/README.md @@ -0,0 +1,4 @@ +The "unstable" build is used internally by Microsoft to test prerelease versions +of our C++ compiler; not seeing results from these build definitions in the +GitHub portal is normal as these builds depend on acquisition of private +compiler bits that aren't yet shipping. diff --git a/vcpkg/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml new file mode 100644 index 0000000..21a9d92 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows-unstable/azure-pipelines.yml @@ -0,0 +1,81 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +jobs: +- job: x64_windows + pool: + name: vcpkg-testing-msvc + demands: ImageVersionOverride -equals 2025.10.17 + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: D:\ + - name: VCPKG_DOWNLOADS + value: D:\downloads + - name: Codeql.Enabled + value: false + steps: + - task: DownloadBuildArtifacts@0 + displayName: 'Download DropBuildNumber if not specified' + inputs: + buildType: specific + project: '0bdbc590-a062-4c3f-b0f6-9383f67865ee' + pipeline: 16549 + buildVersionToDownload: latestFromBranch + branchName: 'refs/heads/$(MSVCBranchName)' + artifactName: BuildNumber + downloadPath: 'D:\msvc-drops' + condition: eq(variables['DropBuildNumber'], '') + - task: PowerShell@2 + displayName: 'Set DropBuildNumber if not specified' + inputs: + targetType: inline + script: | + $DropBuildNumber = Get-Content -Path D:\msvc-drops\BuildNumber\Build.BuildNumber.txt + Write-Host "##vso[task.setvariable variable=DropBuildNumber]$DropBuildNumber" + Write-Host "Build Number set to: $DropBuildNumber" + pwsh: true + condition: eq(variables['DropBuildNumber'], '') + - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 + displayName: 'Download msvc x86 ret' + inputs: + dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' + buildNumber: 'msvc/builds/$(DropBuildNumber)/x86ret' + destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.x86ret' + - task: ms-vscs-artifact.build-tasks.artifactDropDownloadTask-1.artifactDropDownloadTask@0 + displayName: 'Download msvc amd64 ret' + inputs: + dropServiceURI: 'https://devdiv.artifacts.visualstudio.com/DefaultCollection' + buildNumber: 'msvc/builds/$(DropBuildNumber)/amd64ret' + destinationPath: 'D:\msvc-drops\$(DropBuildNumber)\binaries.amd64ret' + - task: PowerShell@2 + displayName: 'Rearrange MSVC Drop Layout' + inputs: + targetType: filePath + filePath: 'scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1' + arguments: '-DropRoot "D:\msvc-drops\$(DropBuildNumber)" -BuildType ret' + pwsh: true + - script: .\bootstrap-vcpkg.bat + displayName: 'Bootstrap vcpkg' + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: 'pscore' + failOnStandardError: true + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions r --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,read" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet x64-windows -BuildReason $(Build.Reason) -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) -AllowUnexpectedPassing + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for x64-windows" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' + artifact: "failure logs for x64-windows" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') diff --git a/vcpkg/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 b/vcpkg/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 new file mode 100644 index 0000000..5369253 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows-unstable/rearrange-msvc-drop-layout.ps1 @@ -0,0 +1,75 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# +<# +.SYNOPSIS +Moves files from an MSVC compiler drop to the locations where they are installed in a Visual Studio installation. + +.PARAMETER DropRoot +The location where the MSVC compiler drop has been downloaded. + +.PARAMETER BuildType +The MSVC drop build type set with /p:_BuildType when MSVC was built. Defaults to 'ret'. + +#> +[CmdletBinding()] +param( + [Parameter(Mandatory = $true)][string]$DropRoot, + [Parameter(Mandatory = $false)][ValidateSet('ret', 'chk')][string]$BuildType = 'ret' +) + +Set-StrictMode -Version Latest + +$MSVCRoot = "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC" + +$ErrorActionPreference = "Stop" + +$tempRoot = "$DropRoot\readytodeploy" + +New-Item -ItemType Directory -Path $tempRoot | Out-Null + +Write-Host "Rearranging x86$BuildType" +New-Item -ItemType Directory -Path "$tempRoot\bin\HostX86" | Out-Null +Move-Item "$DropRoot\binaries.x86$BuildType\bin\i386" "$tempRoot\bin\HostX86\x86" +Move-Item "$DropRoot\binaries.x86$BuildType\bin\x86_amd64" "$tempRoot\bin\HostX86\x64" +Move-Item "$DropRoot\binaries.x86$BuildType\bin\x86_arm" "$tempRoot\bin\HostX86\arm" + +Write-Host "Rearranging amd64$BuildType" +New-Item -ItemType Directory -Path "$tempRoot\bin\HostX64" | Out-Null +Move-Item "$DropRoot\binaries.amd64$BuildType\bin\amd64" "$tempRoot\bin\HostX64\x64" +Move-Item "$DropRoot\binaries.amd64$BuildType\bin\amd64_x86" "$tempRoot\bin\HostX64\x86" +Move-Item "$DropRoot\binaries.amd64$BuildType\bin\amd64_arm" "$tempRoot\bin\HostX64\arm" + +# Only copy files and directories that already exist in the VS installation. +Write-Host "Rearranging inc, lib" +New-Item -ItemType Directory -Path "$tempRoot\lib" | Out-Null +Move-Item "$DropRoot\binaries.x86$BuildType\inc" "$tempRoot\include" +Move-Item "$DropRoot\binaries.x86$BuildType\lib\i386" "$tempRoot\lib\x86" +Move-Item "$DropRoot\binaries.amd64$BuildType\lib\amd64" "$tempRoot\lib\x64" + +Write-Host "Rearranging atlmfc" +New-Item -ItemType Directory -Path "$tempRoot\atlmfc" | Out-Null +New-Item -ItemType Directory -Path "$tempRoot\atlmfc\lib" | Out-Null +Move-Item "$DropRoot\binaries.x86$BuildType\atlmfc\include" "$tempRoot\atlmfc\include" +Move-Item "$DropRoot\binaries.x86$BuildType\atlmfc\lib\i386" "$tempRoot\atlmfc\lib\x86" +Move-Item "$DropRoot\binaries.amd64$BuildType\atlmfc\lib\amd64" "$tempRoot\atlmfc\lib\x64" + +[string[]]$toolsets = Get-ChildItem -Path $MSVCRoot -Directory | Sort-Object -Descending +if ($toolsets.Length -eq 0) { + throw "Could not find Visual Studio toolset!" +} + +Write-Host "Found toolsets:`n$($toolsets -join `"`n`")`n" +$selectedToolset = $toolsets[0] +Write-Host "Using toolset: $selectedToolset" +for ($idx = 1; $idx -lt $toolsets.Length; $idx++) { + $badToolset = $toolsets[$idx] + Write-Host "Deleting toolset: $badToolset" + Remove-Item $badToolset -Recurse -Force +} + +Write-Host "Deploying $tempRoot => $selectedToolset" +Copy-Item "$tempRoot\*" $selectedToolset -Recurse -Force +Write-Host "Deleting $DropRoot..." +Remove-Item $DropRoot -Recurse -Force +Write-Host "Done!" diff --git a/vcpkg/scripts/azure-pipelines/windows/azure-pipelines.yml b/vcpkg/scripts/azure-pipelines/windows/azure-pipelines.yml new file mode 100644 index 0000000..0efe34d --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/azure-pipelines.yml @@ -0,0 +1,133 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +parameters: + - name: vcpkgToolSha + displayName: 'Custom SHA of vcpkg-tool to use rather than bootstrap' + type: string + default: 'use default' + - name: jobName + type: string + default: 'x86_windows' + - name: tripletPattern + displayName: 'Enable the triplets which contain this substring' + type: string + default: '' + +jobs: +- job: ${{ parameters.jobName }} + condition: and(succeeded(), contains('^${{ replace(parameters.jobName, '_', '-') }}$', '${{ parameters.tripletPattern }}')) + pool: + name: PrWin-WUS + demands: ImageVersionOverride -equals 2025.10.17 + timeoutInMinutes: 2880 # 2 days + variables: + - name: WORKING_ROOT + value: D:\ + - name: VCPKG_DOWNLOADS + value: D:\downloads + - name: DiffFile + value: $(Build.ArtifactStagingDirectory)\format.diff + - name: ExtraChecksTriplet + value: x86-windows + steps: + - script: .\bootstrap-vcpkg.bat + displayName: 'Bootstrap vcpkg' + condition: eq('use default', '${{ parameters.vcpkgToolSha }}') + - script: .\scripts\azure-pipelines\windows\bootstrap-from-source.cmd ${{ parameters.vcpkgToolSha }} + displayName: "Build vcpkg with CMake" + condition: ne('use default', '${{ parameters.vcpkgToolSha }}') + - script: | + .\vcpkg.exe format-manifest --all + .\vcpkg.exe format-feature-baseline scripts\ci.baseline.txt + .\vcpkg.exe format-feature-baseline scripts\ci.feature.baseline.txt + displayName: 'Format Manifests and Baselines' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + - task: PowerShell@2 + displayName: 'Create Diff' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + inputs: + filePath: scripts/azure-pipelines/Create-PRDiff.ps1 + arguments: "-DiffFile '$(DiffFile)'" + pwsh: true + - task: PublishPipelineArtifact@1 + displayName: 'Publish Format and Documentation Diff' + condition: and(eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}'), failed()) + inputs: + targetPath: '$(DiffFile)' + artifact: 'format.diff' + - task: AzureCLI@2 + displayName: '*** Test Modified Ports' + inputs: + azureSubscription: 'vcpkg-pr-fleet-wus' + scriptType: 'pscore' + scriptLocation: 'inlineScript' + inlineScript: | + $current = Get-Date -AsUtc + $endDate = $current.AddDays(2) + $end = Get-Date -Date $endDate -UFormat '+%Y-%m-%dT%H:%MZ' + $assetSas = az storage container generate-sas --name cache --account-name vcpkgassetcachewus --as-user --auth-mode login --https-only --permissions rcl --expiry $end -o tsv | Out-String + $assetSas = $assetSas.Trim() + $binarySas = az storage container generate-sas --name cache --account-name vcpkgbinarycachewus --as-user --auth-mode login --https-only --permissions rclw --expiry $end -o tsv | Out-String + $binarySas = $binarySas.Trim() + # Persist the binary SAS as a secret pipeline variable for the owners-db step + Write-Host "##vso[task.setvariable variable=BCACHE_SAS_TOKEN;issecret=true]$binarySas" + $env:X_VCPKG_ASSET_SOURCES = "x-azurl,https://vcpkgassetcachewus.blob.core.windows.net/cache,$assetSas,readwrite" + & scripts/azure-pipelines/test-modified-ports.ps1 -Triplet ${{ replace(parameters.jobName, '_', '-') }} -BuildReason $(Build.Reason) -BinarySourceStub "x-azcopy-sas,https://vcpkgbinarycachewus.blob.core.windows.net/cache,$binarySas" -WorkingRoot $env:WORKING_ROOT -ArtifactStagingDirectory $(Build.ArtifactStagingDirectory) + - task: PowerShell@2 + displayName: 'Validate version files' + condition: eq('${{ replace(parameters.jobName, '_', '-') }}', '${{ variables.ExtraChecksTriplet }}') + inputs: + filePath: 'scripts/azure-pipelines/windows/validate-version-files.ps1' + pwsh: true + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(Build.ArtifactStagingDirectory)\failure-logs' + artifact: "failure logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['FAILURE_LOGS_EMPTY'], 'True') + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + inputs: + targetPath: '$(WORKING_ROOT)/azcopy-logs' + artifactName: "z azcopy logs for ${{ replace(parameters.jobName, '_', '-') }}" + condition: ne(variables['AZCOPY_LOGS_EMPTY'], 'True') + - task: UseNode@1 + displayName: 'Ensure Node.js is available' + condition: always() + inputs: + version: '22.x' + - task: PowerShell@2 + displayName: 'Build a file list for all packages' + condition: always() + inputs: + targetType: inline + script: | + cd scripts/azure-pipelines/owners-db + npm ci -s + if ($env:BUILD_REASON -eq 'PullRequest') { + Write-Host 'Running file_script_from_cache for PR' + $blob = "https://vcpkgbinarycachewus.blob.core.windows.net/cache?$env:BCACHE_SAS_TOKEN" + npx --yes ts-node ./file_script_from_cache.ts --pr-hashes "$env:BUILD_ARTIFACTSTAGINGDIRECTORY/pr-hashes.json" --blob-base-url "$blob" --target-branch "origin/master" --out-dir ../../list_files + } else { + Write-Host 'Running file_script for CI' + npx --yes ts-node ./file_script.ts --info-dir D:\installed\vcpkg\info\ --out-dir ../../list_files + } + pwsh: true + env: + BCACHE_SAS_TOKEN: $(BCACHE_SAS_TOKEN) + - task: PublishPipelineArtifact@1 + displayName: "Publish Artifact: file lists for ${{ replace(parameters.jobName, '_', '-') }}" + condition: always() + inputs: + targetPath: scripts/list_files + artifact: "file lists for ${{ replace(parameters.jobName, '_', '-') }}" + - task: PublishTestResults@2 + displayName: 'Publish Test Results' + condition: ne(variables['XML_RESULTS_FILE'], '') + inputs: + testRunTitle: ${{ replace(parameters.jobName, '_', '-') }} + testResultsFormat: xUnit + testResultsFiles: $(XML_RESULTS_FILE) + platform: ${{ replace(parameters.jobName, '_', '-') }} diff --git a/vcpkg/scripts/azure-pipelines/windows/bootstrap-from-source.cmd b/vcpkg/scripts/azure-pipelines/windows/bootstrap-from-source.cmd new file mode 100644 index 0000000..73a03ff --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/bootstrap-from-source.cmd @@ -0,0 +1,8 @@ +call "C:\Program Files\Microsoft Visual Studio\2022\Enterprise\Common7\Tools\VsDevCmd.bat" -arch=x86 -host_arch=x86 +git clone --depth 1 https://github.com/microsoft/vcpkg-tool vcpkg-tool +git -C vcpkg-tool fetch --depth 1 origin %1 +git -C vcpkg-tool switch -d FETCH_HEAD +rmdir /s /q build.x86.release > nul 2> nul +cmake.exe -G Ninja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF -DVCPKG_DEVELOPMENT_WARNINGS=OFF -DVCPKG_WARNINGS_AS_ERRORS=OFF -DVCPKG_BUILD_FUZZING=OFF -DVCPKG_BUILD_TLS12_DOWNLOADER=OFF -B build.x86.release -S vcpkg-tool +ninja.exe -C build.x86.release +move build.x86.release\vcpkg.exe vcpkg.exe diff --git a/vcpkg/scripts/azure-pipelines/windows/create-image.ps1 b/vcpkg/scripts/azure-pipelines/windows/create-image.ps1 new file mode 100644 index 0000000..d4e02b2 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/create-image.ps1 @@ -0,0 +1,287 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Creates a Windows virtual machine image, set up for vcpkg's CI. + +.DESCRIPTION +create-image.ps1 creates an Azure Windows VM image, set up for vcpkg's CI system. + +This script assumes you have installed Azure tools into PowerShell by following the instructions +at https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-3.6.1 +or are running from Azure Cloud Shell. +#> + +$Location = 'westus3' +$DatePrefixComponent = Get-Date -Format 'yyyy-MM-dd' +$Prefix = "Win-$DatePrefixComponent" +$GalleryImageVersion = $DatePrefixComponent.Replace('-','.') +$VMSize = 'Standard_D8ads_v5' +$ProtoVMName = 'PROTOTYPE' +$WindowsServerSku = '2025-datacenter-azure-edition' +$ErrorActionPreference = 'Stop' + +$ProgressActivity = 'Creating Windows Image' +$TotalProgress = 18 +$CurrentProgress = 1 + +# Assigning this to another variable helps when running the commands in this script manually for +# debugging +$Root = $PSScriptRoot + +<# +.SYNOPSIS +Generates a random password. + +.DESCRIPTION +New-Password generates a password, randomly, of length $Length, containing +only alphanumeric characters, underscore, and dash. + +.PARAMETER Length +The length of the returned password. +#> +function New-Password { + Param ([int] $Length = 32) + $alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-" + if ($alphabet.Length -ne 64) { + throw 'Bad alphabet length' + } + + $result = New-Object SecureString + for ($idx = 0; $idx -lt $Length; $idx++) { + $result.AppendChar($alphabet[(Get-SecureRandom -Maximum $alphabet.Length)]) + } + + return $result +} + +<# +.SYNOPSIS +Waits for the shutdown of the specified resource. + +.DESCRIPTION +Wait-Shutdown takes a VM, and checks if there's a 'PowerState/stopped' +code; if there is, it returns. If there isn't, it waits ten seconds and +tries again. + +.PARAMETER ResourceGroupName +The name of the resource group to look up the VM in. + +.PARAMETER Name +The name of the virtual machine to wait on. +#> +function Wait-Shutdown { + [CmdletBinding()] + Param([string]$ResourceGroupName, [string]$Name) + + Write-Host "Waiting for $Name to stop..." + while ($true) { + $Vm = Get-AzVM -ResourceGroupName $ResourceGroupName -Name $Name -Status + $highestStatus = $Vm.Statuses.Count + for ($idx = 0; $idx -lt $highestStatus; $idx++) { + if ($Vm.Statuses[$idx].Code -eq 'PowerState/stopped') { + return + } + } + + Write-Host "... not stopped yet, sleeping for 10 seconds" + Start-Sleep -Seconds 10 + } +} + + +$AdminPW = New-Password +$Credential = New-Object System.Management.Automation.PSCredential ("AdminUser", $AdminPW) + +$VirtualNetwork = Get-AzVirtualNetwork -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkg-image-minting-wus3' +$Subnet = $VirtualNetwork.Subnets | Where-Object -Property 'Name' -EQ -Value 'image-minting' | Select-Object -First 1 + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Creating prototype VM' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +$NicName = $Prefix + 'NIC' +$Nic = New-AzNetworkInterface ` + -Name $NicName ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Location $Location ` + -Subnet $Subnet ` + -EnableAcceleratedNetworking + +$VM = New-AzVMConfig -Name $ProtoVMName -VMSize $VMSize -SecurityType TrustedLaunch -IdentityType SystemAssigned +$VM = Set-AzVMOperatingSystem ` + -VM $VM ` + -Windows ` + -ComputerName $ProtoVMName ` + -Credential $Credential ` + -ProvisionVMAgent + +$VM = Add-AzVMNetworkInterface -VM $VM -Id $Nic.Id +$VM = Set-AzVMOSDisk -VM $VM -StorageAccountType 'Premium_LRS' -CreateOption 'FromImage' +$VM = Set-AzVMSourceImage ` + -VM $VM ` + -PublisherName 'MicrosoftWindowsServer' ` + -Offer 'WindowsServer' ` + -Skus $WindowsServerSku ` + -Version latest + +$VM = Set-AzVMBootDiagnostic -VM $VM -Disable +New-AzVm ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Location $Location ` + -VM $VM + +$VMCreated = Get-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName +$VMCreatedOsDisk = $VMCreated.StorageProfile.OsDisk.Name + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Minting token for vcpkg-image-minting storage account' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +$VcpkgImageMintingAccount = Get-AzStorageAccount -ResourceGroupName 'vcpkg-image-minting' -Name 'vcpkgimageminting' + +$AssetStorageContext = New-AzStorageContext -StorageAccountName 'vcpkgimageminting' -UseConnectedAccount +$StartTime = Get-Date +$ExpiryTime = $StartTime.AddHours(4) +$AssetsSas = New-AzStorageContainerSASToken -Name 'assets' -Permission r -StartTime $StartTime -ExpiryTime $ExpiryTime -Context $AssetStorageContext + +#################################################################################################### +function Invoke-ScriptWithPrefix { + param( + [string]$ScriptName, + [switch]$SkipSas + ) + + Write-Progress ` + -Activity $ProgressActivity ` + -Status "Running provisioning script $ScriptName in VM" ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + + $UtilityPrefixContent = Get-Content "$Root\utility-prefix.ps1" -Encoding utf8NoBOM -Raw + + $tempScriptFilename = "$env:TEMP\temp-script.txt" + try { + $script = Get-Content "$Root\$ScriptName" -Encoding utf8NoBOM -Raw +$replacement = @" +if (Test-Path "`$PSScriptRoot/utility-prefix.ps1") { + . "`$PSScriptRoot/utility-prefix.ps1" +} +"@ + $script = $script.Replace($replacement, $UtilityPrefixContent); + Set-Content -Path $tempScriptFilename -Value $script -Encoding utf8NoBOM + + $parameter = $null + if (-not $SkipSas) { + $parameter = @{SasToken = "`"$AssetsSas`"";} + } + + $InvokeResult = Invoke-AzVMRunCommand ` + -ResourceGroupName 'vcpkg-image-minting' ` + -VMName $ProtoVMName ` + -CommandId 'RunPowerShellScript' ` + -ScriptPath $tempScriptFilename ` + -Parameter $parameter + + Write-Host "$ScriptName output: $($InvokeResult.value.Message)" + } finally { + Remove-Item $tempScriptFilename -Force + } +} + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-tlssettings.ps1' -SkipSas +Write-Host 'Waiting 1 minute for VM to reboot...' +Start-Sleep -Seconds 60 + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-visual-studio.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-mpi.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-cuda.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-cudnn.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-inteloneapi.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-pwsh.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-azure-cli.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-azcopy.ps1' + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'deploy-settings.txt' -SkipSas +Restart-AzVM -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName + +#################################################################################################### +Invoke-ScriptWithPrefix -ScriptName 'sysprep.ps1' + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Waiting for VM to shut down' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Wait-Shutdown -ResourceGroupName 'vcpkg-image-minting' -Name $ProtoVMName + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Converting VM to Image' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Stop-AzVM ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Name $ProtoVMName ` + -Force + +Set-AzVM ` + -ResourceGroupName 'vcpkg-image-minting' ` + -Name $ProtoVMName ` + -Generalized + +$westus3Location = @{Name = 'West US 3';} +$westusLocation = @{Name = 'West US';} + +New-AzGalleryImageVersion ` + -ResourceGroupName 'vcpkg-image-minting' ` + -GalleryName 'vcpkg_gallery_wus3' ` + -GalleryImageDefinitionName 'PrWinWus3-TrustedLaunch' ` + -Name $GalleryImageVersion ` + -Location $Location ` + -SourceImageVMId $VMCreated.ID ` + -ReplicaCount 1 ` + -StorageAccountType 'Premium_LRS' ` + -PublishingProfileExcludeFromLatest ` + -TargetRegion @($westus3Location, $westusLocation) + +#################################################################################################### +Write-Progress ` + -Activity $ProgressActivity ` + -Status 'Deleting unused temporary resources' ` + -PercentComplete (100 / $TotalProgress * $CurrentProgress++) + +Remove-AzVM -Id $VMCreated.ID -Force +Remove-AzDisk -ResourceGroupName 'vcpkg-image-minting' -Name $VMCreatedOsDisk -Force +Remove-AzNetworkInterface -ResourceGroupName 'vcpkg-image-minting' -Name $NicName -Force + +#################################################################################################### +Write-Progress -Activity $ProgressActivity -Completed +Write-Host "Generated Image: $GalleryImageVersion" +Write-Host 'Finished!' + +$AdminPW.Dispose() diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-azcopy.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-azcopy.ps1 new file mode 100644 index 0000000..3c9ec68 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-azcopy.ps1 @@ -0,0 +1,21 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$AzCopyUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $AzCopyUrl = 'https://github.com/Azure/azure-storage-azcopy/releases/download/v10.30.1/azcopy_windows_amd64_10.30.1.zip' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $AzCopyUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azcopy_windows_amd64_10.30.1.zip?$SasToken" +} + +mkdir -Force "C:\AzCopy10" +DownloadAndUnzip -Name 'azcopy' -Url $AzCopyUrl -Destination "C:\AzCopy10" diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 new file mode 100644 index 0000000..19e5207 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-azure-cli.ps1 @@ -0,0 +1,20 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$AzCliUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $AzCliUrl = 'https://azcliprod.blob.core.windows.net/msi/azure-cli-2.78.0-x64.msi' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $AzCliUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/azure-cli-2.78.0-x64.msi?$SasToken" +} + +DownloadAndInstall -Url $AzCliUrl -Name 'Azure CLI' -Args @('/quiet', '/norestart') diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-cuda.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-cuda.ps1 new file mode 100644 index 0000000..4903b23 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-cuda.ps1 @@ -0,0 +1,67 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$CudaUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $CudaUrl = 'https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_576.57_windows.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $CudaUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cuda_12.9.1_576.57_windows.exe?$SasToken" +} + +# https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html +# Intentionally omitted: +# demo_suite_12.9 +# documentation_12.9 +# nsight_compute_12.9 +# nsight_systems_12.9 +# nsight_vse_12.9 +# nvvm_samples_12.9 +# visual_studio_integration_12.9 +# visual_profiler_12.9 +# Display.Driver +DownloadAndInstall -Name 'CUDA' -Url $CudaUrl -Args @( + '-s', + 'cublas_12.9', + 'cublas_dev_12.9', + 'cuda_profiler_api_12.9', + 'cudart_12.9', + 'cufft_12.9', + 'cufft_dev_12.9', + 'cuobjdump_12.9', + 'cupti_12.9', + 'curand_12.9', + 'curand_dev_12.9', + 'cusolver_12.9', + 'cusolver_dev_12.9', + 'cusparse_12.9', + 'cusparse_dev_12.9', + 'cuxxfilt_12.9', + 'npp_12.9', + 'npp_dev_12.9', + 'nvcc_12.9', + 'nvdisasm_12.9', + 'nvfatbin_12.9', + 'nvjitlink_12.9', + 'nvjpeg_12.9', + 'nvjpeg_dev_12.9', + 'nvml_dev_12.9', + 'nvprof_12.9', + 'nvprune_12.9', + 'nvrtc_12.9', + 'nvrtc_dev_12.9', + 'nvtx_12.9', + 'occupancy_calculator_12.9', + 'opencl_12.9', + 'sanitizer_12.9', + 'thrust_12.9', + '-n' +) diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-cudnn.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-cudnn.ps1 new file mode 100644 index 0000000..9b20660 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-cudnn.ps1 @@ -0,0 +1,26 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$CudnnUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $CudnnUrl = 'https://developer.download.nvidia.com/compute/cudnn/redist/cudnn/windows-x86_64/cudnn-windows-x86_64-9.10.2.21_cuda12-archive.zip' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $CudnnUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/cudnn-windows-x86_64-9.10.2.21_cuda12-archive.zip?$SasToken" +} + +DownloadAndUnzip -Name 'CUDNN' -Url $CudnnUrl -Destination "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.9" + +if (Test-Path "$env:ProgramFiles\NVIDIA GPU Computing Toolkit\CUDA\v12.9\include\cudnn.h") { + Write-Host 'cudnn appears correctly installed' +} else { + Write-Error 'cudnn appears broken!' +} diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-install-disk.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-install-disk.ps1 new file mode 100644 index 0000000..c981900 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-install-disk.ps1 @@ -0,0 +1,64 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +<# +.SYNOPSIS +Partitions a new physical disk. +.DESCRIPTION +Takes the disk $DiskNumber, turns it on, then partitions it for use with label +$Label and drive letter $Letter. +.PARAMETER DiskNumber +The number of the disk to set up. +.PARAMETER Letter +The drive letter at which to mount the disk. +.PARAMETER Label +The label to give the disk. +#> +Function New-PhysicalDisk { +Param( + [int]$DiskNumber, + [string]$Letter, + [string]$Label +) + if ($Letter.Length -ne 1) { + throw "Bad drive letter $Letter, expected only one letter. (Did you accidentally add a : ?)" + } + + try { + Write-Host "Attempting to online physical disk $DiskNumber" + [string]$diskpartScriptPath = Get-TempFilePath -Extension 'txt' + [string]$diskpartScriptContent = + "SELECT DISK $DiskNumber`r`n" + + "ONLINE DISK`r`n" + + Write-Host "Writing diskpart script to $diskpartScriptPath with content:" + Write-Host $diskpartScriptContent + Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent + Write-Host 'Invoking DISKPART...' + & diskpart.exe /s $diskpartScriptPath + + Write-Host "Provisioning physical disk $DiskNumber as drive $Letter" + [string]$diskpartScriptContent = + "SELECT DISK $DiskNumber`r`n" + + "ATTRIBUTES DISK CLEAR READONLY`r`n" + + "CREATE PARTITION PRIMARY`r`n" + + "FORMAT FS=NTFS LABEL=`"$Label`" QUICK`r`n" + + "ASSIGN LETTER=$Letter`r`n" + Write-Host "Writing diskpart script to $diskpartScriptPath with content:" + Write-Host $diskpartScriptContent + Set-Content -Path $diskpartScriptPath -Value $diskpartScriptContent + Write-Host 'Invoking DISKPART...' + & diskpart.exe /s $diskpartScriptPath + } + catch { + Write-Error "Failed to provision physical disk $DiskNumber as drive $Letter! $($_.Exception.Message)" + } +} + +New-PhysicalDisk -DiskNumber 1 -Letter 'E' -Label 'install disk' diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 new file mode 100644 index 0000000..6b99d9f --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-inteloneapi.ps1 @@ -0,0 +1,66 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + + +[string]$oneAPIBaseUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $oneAPIBaseUrl = 'https://registrationcenter-download.intel.com/akdlm/IRC_NAS/3bbdaf75-6728-492e-a18c-be654dae9ee2/intel-oneapi-hpc-toolkit-2025.2.0.576_offline.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $oneAPIBaseUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/intel-oneapi-hpc-toolkit-2025.2.0.576_offline.exe?$SasToken" +} + +$oneAPIHPCComponents = 'intel.oneapi.win.ifort-compiler' + +$LocalName = 'intel-oneapi-hpc-toolkit-2025.2.0.576_offline.exe' + +try { + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local Intel oneAPI..." + } else { + Write-Host "Downloading Intel oneAPI..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force + $LocalPath = Join-Path $tempPath $LocalName + curl.exe -L -o $LocalPath $oneAPIBaseUrl + $doRemove = $true + } + + [string]$extractionPath = Get-TempFilePath + Write-Host 'Extracting Intel oneAPI...to folder: ' $extractionPath + $proc = Start-Process -FilePath $LocalPath -ArgumentList @('-s ', '-x', '-f', $extractionPath) -Wait -PassThru + $exitCode = $proc.ExitCode + if ($exitCode -eq 0) { + Write-Host 'Extraction successful!' + } else { + Write-Error "Extraction failed! Exited with $exitCode." + throw + } + + Write-Host 'Install Intel oneAPI...from folder: ' $extractionPath + $proc = Start-Process -FilePath "$extractionPath/bootstrapper.exe" -ArgumentList @('-s ', '--action install', "--components=$oneAPIHPCComponents" , '--eula=accept', '-p=NEED_VS2017_INTEGRATION=0', '-p=NEED_VS2019_INTEGRATION=0', '-p=NEED_VS2022_INTEGRATION=0', '--log-dir=.') -Wait -PassThru + $exitCode = $proc.ExitCode + if ($exitCode -eq 0) { + Write-Host 'Installation successful!' + } elseif ($exitCode -eq 3010) { + Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' + } else { + Write-Error "Installation failed! Exited with $exitCode." + } + + if ($doRemove) { + Remove-Item -Path $LocalPath -Force + } +} catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" +} diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-mpi.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-mpi.ps1 new file mode 100644 index 0000000..5f66bdb --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-mpi.ps1 @@ -0,0 +1,20 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$MpiUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $MpiUrl = 'https://download.microsoft.com/download/a/5/2/a5207ca5-1203-491a-8fb8-906fd68ae623/msmpisetup.exe' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $MpiUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/msmpisetup.exe?$SasToken" +} + +DownloadAndInstall -Name 'MSMPI' -Url $MpiUrl -Args @('-force', '-unattend') diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-pwsh.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-pwsh.ps1 new file mode 100644 index 0000000..94b05e3 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-pwsh.ps1 @@ -0,0 +1,20 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +[string]$PwshUrl +if ([string]::IsNullOrEmpty($SasToken)) { + Write-Host 'Downloading from the Internet' + $PwshUrl = 'https://github.com/PowerShell/PowerShell/releases/download/v7.5.3/PowerShell-7.5.3-win-x64.msi' +} else { + Write-Host 'Downloading from vcpkgimageminting using SAS token' + $SasToken = $SasToken.Replace('"', '') + $PwshUrl = "https://vcpkgimageminting.blob.core.windows.net/assets/PowerShell-7.5.3-win-x64.msi?$SasToken" +} + +DownloadAndInstall -Url $PwshUrl -Name 'PowerShell Core' -Args @('/quiet', '/norestart') diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-settings.txt b/vcpkg/scripts/azure-pipelines/windows/deploy-settings.txt new file mode 100644 index 0000000..102aafe --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-settings.txt @@ -0,0 +1,20 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +$ErrorActionPreference = 'Stop' +$ProgressPreference = 'SilentlyContinue' + +$av = Get-Command Add-MPPreference -ErrorAction SilentlyContinue +if ($null -eq $av) { + Write-Host 'AntiVirus not installed, skipping exclusions.' +} else { + Write-Host 'Configuring AntiVirus exclusions...' + Add-MpPreference -ExclusionPath C:\agent + Add-MPPreference -ExclusionPath D:\ + Add-MPPreference -ExclusionPath E:\ + Add-MPPreference -ExclusionProcess ninja.exe + Add-MPPreference -ExclusionProcess clang-cl.exe + Add-MPPreference -ExclusionProcess cl.exe + Add-MPPreference -ExclusionProcess link.exe + Add-MPPreference -ExclusionProcess python.exe +} diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 new file mode 100644 index 0000000..94e3732 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-tlssettings.ps1 @@ -0,0 +1,738 @@ +#*************************************************************************************************************** +# This script supports the TLS 1.2 everywhere project +# It does the following: +# * By default it disables TLS 1.O, TLS 1.1, SSLv2, SSLv3 and Enables TLS1.2 +# * The CipherSuite order is set to the SDL approved version. +# * The FIPS MinEncryptionLevel is set to 3. +# * RC4 is disabled +# * A log with a transcript of all actions taken is generated +#*************************************************************************************************************** + +#************************************************ SCRIPT USAGE ************************************************ +# .\TLSSettings.ps1 +# -SetCipherOrder : Excellence/Min-Bar, default(Excellence), use B to set Min-Bar. (Min-Bar ordering prefers ciphers with smaller key sizes to improve performance over security) +# -RebootIfRequired : $true/$false, default($true), use $false to disable auto-reboot (Settings won't take effect until a reboot is completed) +# -EnableOlderTlsVersions : $true/$false, default($false), use $true to explicitly Enable TLS1.0, TLS1.1 +#*************************************************************************************************************** + +#***************************TEAM CAN DETERMINE WHAT CIPHER SUITE ORDER IS CHOSEN ****************************** +# Option B provides the min-bar configuration (small trade-off: performance over security) +# Syntax: .\TLSSettings.ps1 -SetCipherOrder B +# if no option is supplied, you will get the opportunity for excellence cipher order (small trade-off: security over performance) +# Syntax: .\TLSSettings.ps1 +#*************************************************************************************************************** + +param ( + [string]$SetCipherOrder = " ", + [bool]$RebootIfRequired = $true, + [bool]$EnableOlderTlsVersions = $false +) + +#******************* FUNCTION THAT ACTUALLY UPDATES KEYS; WILL RETURN REBOOT FLAG IF CHANGES *********************** +Function Set-CryptoSetting { + param ( + $regKeyName, + $value, + $valuedata, + $valuetype + ) + + $restart = $false + + # Check for existence of registry key, and create if it does not exist + If (!(Test-Path -Path $regKeyName)) { + New-Item $regKeyName | Out-Null + } + + + # Get data of registry value, or null if it does not exist + $val = (Get-ItemProperty -Path $regKeyName -Name $value -ErrorAction SilentlyContinue).$value + + + If ($val -eq $null) { + # Value does not exist - create and set to desired value + New-ItemProperty -Path $regKeyName -Name $value -Value $valuedata -PropertyType $valuetype | Out-Null + $restart = $true + } + Else { + # Value does exist - if not equal to desired value, change it + If ($val -ne $valuedata) { + Set-ItemProperty -Path $regKeyName -Name $value -Value $valuedata + $restart = $true + } + } + + + $restart +} +#*************************************************************************************************************** + + +#******************* FUNCTION THAT DISABLES RC4 *********************** +Function DisableRC4 { + + $restart = $false + $subkeys = Get-Item -Path "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL" + $ciphers = $subkeys.OpenSubKey("Ciphers", $true) + + Write-Log -Message "----- Checking the status of RC4 -----" -Logfile $logLocation -Severity Information + + $RC4 = $false + if ($ciphers.SubKeyCount -eq 0) { + $k1 = $ciphers.CreateSubKey("RC4 128/128") + $k1.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $restart = $true + $k2 = $ciphers.CreateSubKey("RC4 64/128") + $k2.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $k3 = $ciphers.CreateSubKey("RC4 56/128") + $k3.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + $k4 = $ciphers.CreateSubKey("RC4 40/128") + $k4.SetValue("Enabled", 0, [Microsoft.Win32.RegistryValueKind]::DWord) + + Write-Log -Message "RC4 was disabled " -Logfile $logLocation -Severity Information + $RC4 = $true + } + + If ($RC4 -ne $true) { + Write-Log -Message "There was no change for RC4 " -Logfile $logLocation -Severity Information + } + + $restart +} +#*************************************************************************************************************** + +#******************* FUNCTION CHECKS FOR PROBLEMATIC FIPS SETTING AND FIXES IT *********************** +Function Test-RegistryValueForFipsSettings { + + $restart = $false + + $fipsPath = @( + "HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp", + "HKLM:\SOFTWARE\Policies\Microsoft\Windows NT\Terminal Services", + "HKLM:\System\CurrentControlSet\Control\Terminal Server\DefaultUserConfiguration" + ) + + $fipsValue = "MinEncryptionLevel" + + + foreach ($path in $fipsPath) { + + Write-Log -Message "Checking to see if $($path)\$fipsValue exists" -Logfile $logLocation -Severity Information + + $ErrorActionPreference = "stop" + Try { + + $result = Get-ItemProperty -Path $path | Select-Object -ExpandProperty $fipsValue + if ($result -eq 4) { + set-itemproperty -Path $path -Name $fipsValue -value 3 + Write-Log -Message "Regkey $($path)\$fipsValue was changed from value $result to a value of 3" -Logfile $logLocation -Severity Information + $restart = $true + } + else { + Write-Log -Message "Regkey $($path)\$fipsValue left at value $result" -Logfile $logLocation -Severity Information + } + + } + Catch [System.Management.Automation.ItemNotFoundException] { + + Write-Log -Message "Reg path $path was not found" -Logfile $logLocation -Severity Information + } + Catch [System.Management.Automation.PSArgumentException] { + + Write-Log -Message "Regkey $($path)\$fipsValue was not found" -Logfile $logLocation -Severity Information + } + Catch { + Write-Log -Message "Error of type $($Error[0].Exception.GetType().FullName) trying to get $($path)\$fipsValue" -Logfile $logLocation -Severity Information + } + Finally {$ErrorActionPreference = "Continue" + } + } + $restart +} +#*************************************************************************************************************** + +#********************************** FUNCTION THAT CREATE LOG DIRECTORY IF IT DOES NOT EXIST ******************************* +function CreateLogDirectory { + + $TARGETDIR = "$env:HOMEDRIVE\Logs" + if ( -Not (Test-Path -Path $TARGETDIR ) ) { + New-Item -ItemType directory -Path $TARGETDIR | Out-Null + } + + $TARGETDIR = $TARGETDIR + "\" + "TLSSettingsLogFile.csv" + + return $TARGETDIR +} +#*************************************************************************************************************** + + +#********************************** FUNCTION THAT LOGS WHAT THE SCRIPT IS DOING ******************************* +function Write-Log { + [CmdletBinding()] + param( + [Parameter()] + [ValidateNotNullOrEmpty()] + [string]$Message, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [string]$LogFile, + + [Parameter()] + [ValidateNotNullOrEmpty()] + [ValidateSet('Information', 'Warning', 'Error')] + [string]$Severity = 'Information' + ) + + + [pscustomobject]@{ + Time = (Get-Date -f g) + Message = $Message + Severity = $Severity + } | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Out-File -Append -FilePath $LogFile +} + +#********************************TLS CipherSuite Settings ******************************************* + +# CipherSuites for windows OS < 10 +function Get-BaseCipherSuitesOlderWindows() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" + } + else + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384" + } + + # Add additional ciphers when EnableOlderTlsVersions flag is set to true + if ($EnableOlderTlsVersions) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" + } + return $cipherorder +} + +# Ciphersuites needed for backwards compatibility with Firefox, Chrome +# Server 2012 R2 doesn't support TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 +# Both firefox and chrome negotiate ECDHE_RSA_AES_256_CBC_SHA1, Edge negotiates ECDHE_RSA_AES_256_CBC_SHA384 +function Get-BrowserCompatCipherSuitesOlderWindows() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) + } + else + { + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" # (uses SHA-1) + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384" # (uses SHA-1) + } + return $cipherorder +} + +# Ciphersuites for OS versions windows 10 and above +function Get-BaseCipherSuitesWin10Above() +{ + param + ( + [Parameter(Mandatory=$true, Position=0)][bool] $isExcellenceOrder + ) + + $cipherorder = @() + + if ($isExcellenceOrder -eq $true) + { + + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + } + else + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" + } + # Add additional ciphers when EnableOlderTlsVersions flag is set to true + if ($EnableOlderTlsVersions) + { + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256" + $cipherorder += "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256" + $cipherorder += "TLS_RSA_WITH_AES_256_GCM_SHA384" + $cipherorder += "TLS_RSA_WITH_AES_128_GCM_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA256" + $cipherorder += "TLS_RSA_WITH_AES_256_CBC_SHA" + $cipherorder += "TLS_RSA_WITH_AES_128_CBC_SHA" + } + + return $cipherorder +} + + +#******************************* TLS Version Settings **************************************************** + +function Get-RegKeyPathForTls12() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForTls11() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" + ) + return $regKeyPath +} + +function Get-RegKeypathForTls10() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForSsl30() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 3.0\Server" + ) + return $regKeyPath +} + +function Get-RegKeyPathForSsl20() +{ + $regKeyPath = @( + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Client", + "HKLM:\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\SSL 2.0\Server" + ) + return $regKeyPath +} + +#Initialize reboot value to false +$reboot = $false + +#*****************************Create the logfile if not does not exist*************************************** +$logLocation = CreateLogDirectory + + +#Start writing to the logs +Write-Log -Message "========== Start of logging for a script execution ==========" -Logfile $logLocation -Severity Information + +$registryPathGoodGuys = @() +$registryPathBadGuys = @() + +# we enable TLS 1.2 and disable SSL 2.0, 3.0 in any case +$registryPathGoodGuys += Get-RegKeyPathForTls12 + +$registryPathBadGuys += Get-RegKeyPathForSsl20 +$registryPathBadGuys += Get-RegKeyPathForSsl30 + +# add TLS 1.0/1.1 to good/bad depending on user's preference +# default is adding TLS 1.0/1.1 to bad +if ($EnableOlderTlsVersions) +{ + $registryPathGoodGuys += Get-RegKeypathForTls10 + $registryPathGoodGuys += Get-RegKeyPathForTls11 + Write-Log -Message "Enabling TLS1.2, TLS1.1, TLS1.0. Disabling SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information +} +else +{ + $registryPathBadGuys += Get-RegKeypathForTls10 + $registryPathBadGuys += Get-RegKeyPathForTls11 + Write-Log -Message "Enabling TLS1.2. Disabling TLS1.1, TLS1.0, SSL3.0, SSL2.0" -Logfile $logLocation -Severity Information +} + + +Write-Log -Message "Check which registry keys exist already and which registry keys need to be created." -Logfile $logLocation -Severity Information + +#******************* CREATE THE REGISTRY KEYS IF THEY DON'T EXIST******************************** +# Check for existence of GoodGuy registry keys, and create if they do not exist +For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { + + Write-Log -Message "Checking for existing of key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + If (!(Test-Path -Path $registryPathGoodGuys[$i])) { + New-Item $registryPathGoodGuys[$i] | Out-Null + Write-Log -Message "Creating key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + } +} + +# Check for existence of BadGuy registry keys, and create if they do not exist +For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { + + Write-Log -Message "Checking for existing of key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + If (!(Test-Path -Path $registryPathBadGuys[$i])) { + Write-Log -Message "Creating key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + New-Item $registryPathBadGuys[$i] | Out-Null + } +} + +#******************* EXPLICITLY DISABLE SSLV2, SSLV3, TLS10 AND TLS11 ******************************** +For ($i = 0; $i -lt $registryPathBadGuys.Length; $i = $i + 1) { + + if ($registryPathBadGuys[$i].Contains("Client") -Or $registryPathBadGuys[$i].Contains("Server")) { + + Write-Log -Message "Disabling this key: $($registryPathBadGuys[$i]) " -Logfile $logLocation -Severity Information + $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() Enabled 0 DWord + $result = Set-CryptoSetting $registryPathBadGuys[$i].ToString() DisabledByDefault 1 DWord + $reboot = $reboot -or $result + } +} + +#********************************* EXPLICITLY Enable TLS12 **************************************** +For ($i = 0; $i -lt $registryPathGoodGuys.Length; $i = $i + 1) { + + if ($registryPathGoodGuys[$i].Contains("Client") -Or $registryPathGoodGuys[$i].Contains("Server")) { + + Write-Log -Message "Enabling this key: $($registryPathGoodGuys[$i]) " -Logfile $logLocation -Severity Information + $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() Enabled 1 DWord + $result = Set-CryptoSetting $registryPathGoodGuys[$i].ToString() DisabledByDefault 0 DWord + $reboot = $reboot -or $result + } +} + +#************************************** Disable RC4 ************************************************ +$result = DisableRC4 +$reboot = $reboot -or $result + + +#************************************** Set Cipher Suite Order ************************************** +Write-Log -Message "----- starting ciphersuite order calculation -----" -Logfile $logLocation -Severity Information +$configureExcellenceOrder = $true +if ($SetCipherOrder.ToUpper() -eq "B") +{ + $configureExcellenceOrder = $false + Write-Host "The min bar cipher suite order was chosen." + Write-Log -Message "The min bar cipher suite order was chosen." -Logfile $logLocation -Severity Information +} +else +{ + Write-Host "The opportunity for excellence cipher suite order was chosen." + Write-Log -Message "The opportunity for excellence cipher suite order was chosen." -Logfile $logLocation -Severity Information +} +$cipherlist = @() + +if ([Environment]::OSVersion.Version.Major -lt 10) +{ + $cipherlist += Get-BaseCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder + $cipherlist += Get-BrowserCompatCipherSuitesOlderWindows -isExcellenceOrder $configureExcellenceOrder +} +else +{ + $cipherlist += Get-BaseCipherSuitesWin10Above -isExcellenceOrder $configureExcellenceOrder +} +$cipherorder = [System.String]::Join(",", $cipherlist) + Write-Host "Appropriate ciphersuite order : $cipherorder" + Write-Log -Message "Appropriate ciphersuite order : $cipherorder" -Logfile $logLocation -Severity Information + +$CipherSuiteRegKey = "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" + +if (!(Test-Path -Path $CipherSuiteRegKey)) +{ + New-Item $CipherSuiteRegKey | Out-Null + $reboot = $True + Write-Log -Message "Creating key: $($CipherSuiteRegKey) " -Logfile $logLocation -Severity Information +} + +$val = (Get-Item -Path $CipherSuiteRegKey -ErrorAction SilentlyContinue).GetValue("Functions", $null) +Write-Log -Message "Previous cipher suite value: $val " -Logfile $logLocation -Severity Information +Write-Log -Message "New cipher suite value : $cipherorder " -Logfile $logLocation -Severity Information + +if ($val -ne $cipherorder) +{ + Write-Log -Message "Cipher suite order needs to be updated. " -Logfile $logLocation -Severity Information + Write-Host "The original cipher suite order needs to be updated", `n, $val + Set-ItemProperty -Path $CipherSuiteRegKey -Name Functions -Value $cipherorder + Write-Log -Message "Cipher suite value was updated. " -Logfile $logLocation -Severity Information + $reboot = $True +} +else +{ + Write-Log -Message "Cipher suite order does not need to be updated. " -Logfile $logLocation -Severity Information + Write-Log -Message "Cipher suite value was not updated as there was no change. " -Logfile $logLocation -Severity Information +} + +#****************************** CHECK THE FIPS SETTING WHICH IMPACTS RDP'S ALLOWED CIPHERS ************************** +#Check for FipsSettings +Write-Log -Message "Checking to see if reg keys exist and if MinEncryptionLevel is set to 4" -Logfile $logLocation -Severity Information +$result = Test-RegistryValueForFipsSettings +$reboot = $reboot -or $result + + +#************************************** REBOOT ************************************** + +if ($RebootIfRequired) +{ + Write-Log -Message "You set the RebootIfRequired flag to true. If changes are made, the system will reboot " -Logfile $logLocation -Severity Information + # If any settings were changed, reboot + If ($reboot) + { + Write-Log -Message "Rebooting now... " -Logfile $logLocation -Severity Information + Write-Log -Message "Using this command: shutdown.exe /r /t 5 /c ""Crypto settings changed"" /f /d p:2:4 " -Logfile $logLocation -Severity Information + Write-Host "Rebooting now..." + shutdown.exe /r /t 5 /c "Crypto settings changed" /f /d p:2:4 + } + Else + { + Write-Host "Nothing get updated." + Write-Log -Message "Nothing get updated. " -Logfile $logLocation -Severity Information + } +} +else +{ + + Write-Log -Message "You set the RebootIfRequired flag to false. If changes are made, the system will NOT reboot " -Logfile $logLocation -Severity Information + Write-Log -Message "No changes will take effect until a reboot has been completed. " -Logfile $logLocation -Severity Information + Write-Log -Message "Script does not include a reboot by design" -Logfile $logLocation -Severity Information +} +Write-Log -Message "========== End of logging for a script execution ==========" -Logfile $logLocation -Severity Information +# SIG # Begin signature block +# MIIjhgYJKoZIhvcNAQcCoIIjdzCCI3MCAQExDzANBglghkgBZQMEAgEFADB5Bgor +# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG +# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAHtlEJwNffjnOP +# Sr2t1yq5EfE0ll4GozyZt3UXO9BXKKCCDYEwggX/MIID56ADAgECAhMzAAABh3IX +# chVZQMcJAAAAAAGHMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p +# bmcgUENBIDIwMTEwHhcNMjAwMzA0MTgzOTQ3WhcNMjEwMzAzMTgzOTQ3WjB0MQsw +# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u +# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +# AQDOt8kLc7P3T7MKIhouYHewMFmnq8Ayu7FOhZCQabVwBp2VS4WyB2Qe4TQBT8aB +# znANDEPjHKNdPT8Xz5cNali6XHefS8i/WXtF0vSsP8NEv6mBHuA2p1fw2wB/F0dH +# sJ3GfZ5c0sPJjklsiYqPw59xJ54kM91IOgiO2OUzjNAljPibjCWfH7UzQ1TPHc4d +# weils8GEIrbBRb7IWwiObL12jWT4Yh71NQgvJ9Fn6+UhD9x2uk3dLj84vwt1NuFQ +# itKJxIV0fVsRNR3abQVOLqpDugbr0SzNL6o8xzOHL5OXiGGwg6ekiXA1/2XXY7yV +# Fc39tledDtZjSjNbex1zzwSXAgMBAAGjggF+MIIBejAfBgNVHSUEGDAWBgorBgEE +# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQUhov4ZyO96axkJdMjpzu2zVXOJcsw +# UAYDVR0RBEkwR6RFMEMxKTAnBgNVBAsTIE1pY3Jvc29mdCBPcGVyYXRpb25zIFB1 +# ZXJ0byBSaWNvMRYwFAYDVQQFEw0yMzAwMTIrNDU4Mzg1MB8GA1UdIwQYMBaAFEhu +# ZOVQBdOCqhc3NyK1bajKdQKVMFQGA1UdHwRNMEswSaBHoEWGQ2h0dHA6Ly93d3cu +# bWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY0NvZFNpZ1BDQTIwMTFfMjAxMS0w +# Ny0wOC5jcmwwYQYIKwYBBQUHAQEEVTBTMFEGCCsGAQUFBzAChkVodHRwOi8vd3d3 +# Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY0NvZFNpZ1BDQTIwMTFfMjAx +# MS0wNy0wOC5jcnQwDAYDVR0TAQH/BAIwADANBgkqhkiG9w0BAQsFAAOCAgEAixmy +# S6E6vprWD9KFNIB9G5zyMuIjZAOuUJ1EK/Vlg6Fb3ZHXjjUwATKIcXbFuFC6Wr4K +# NrU4DY/sBVqmab5AC/je3bpUpjtxpEyqUqtPc30wEg/rO9vmKmqKoLPT37svc2NV +# BmGNl+85qO4fV/w7Cx7J0Bbqk19KcRNdjt6eKoTnTPHBHlVHQIHZpMxacbFOAkJr +# qAVkYZdz7ikNXTxV+GRb36tC4ByMNxE2DF7vFdvaiZP0CVZ5ByJ2gAhXMdK9+usx +# zVk913qKde1OAuWdv+rndqkAIm8fUlRnr4saSCg7cIbUwCCf116wUJ7EuJDg0vHe +# yhnCeHnBbyH3RZkHEi2ofmfgnFISJZDdMAeVZGVOh20Jp50XBzqokpPzeZ6zc1/g +# yILNyiVgE+RPkjnUQshd1f1PMgn3tns2Cz7bJiVUaqEO3n9qRFgy5JuLae6UweGf +# AeOo3dgLZxikKzYs3hDMaEtJq8IP71cX7QXe6lnMmXU/Hdfz2p897Zd+kU+vZvKI +# 3cwLfuVQgK2RZ2z+Kc3K3dRPz2rXycK5XCuRZmvGab/WbrZiC7wJQapgBodltMI5 +# GMdFrBg9IeF7/rP4EqVQXeKtevTlZXjpuNhhjuR+2DMt/dWufjXpiW91bo3aH6Ea +# jOALXmoxgltCp1K7hrS6gmsvj94cLRf50QQ4U8Qwggd6MIIFYqADAgECAgphDpDS +# AAAAAAADMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYDVQQGEwJVUzETMBEGA1UECBMK +# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0 +# IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3NvZnQgUm9vdCBDZXJ0aWZpY2F0 +# ZSBBdXRob3JpdHkgMjAxMTAeFw0xMTA3MDgyMDU5MDlaFw0yNjA3MDgyMTA5MDla +# MH4xCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMT +# H01pY3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTEwggIiMA0GCSqGSIb3DQEB +# AQUAA4ICDwAwggIKAoICAQCr8PpyEBwurdhuqoIQTTS68rZYIZ9CGypr6VpQqrgG +# OBoESbp/wwwe3TdrxhLYC/A4wpkGsMg51QEUMULTiQ15ZId+lGAkbK+eSZzpaF7S +# 35tTsgosw6/ZqSuuegmv15ZZymAaBelmdugyUiYSL+erCFDPs0S3XdjELgN1q2jz +# y23zOlyhFvRGuuA4ZKxuZDV4pqBjDy3TQJP4494HDdVceaVJKecNvqATd76UPe/7 +# 4ytaEB9NViiienLgEjq3SV7Y7e1DkYPZe7J7hhvZPrGMXeiJT4Qa8qEvWeSQOy2u +# M1jFtz7+MtOzAz2xsq+SOH7SnYAs9U5WkSE1JcM5bmR/U7qcD60ZI4TL9LoDho33 +# X/DQUr+MlIe8wCF0JV8YKLbMJyg4JZg5SjbPfLGSrhwjp6lm7GEfauEoSZ1fiOIl +# XdMhSz5SxLVXPyQD8NF6Wy/VI+NwXQ9RRnez+ADhvKwCgl/bwBWzvRvUVUvnOaEP +# 6SNJvBi4RHxF5MHDcnrgcuck379GmcXvwhxX24ON7E1JMKerjt/sW5+v/N2wZuLB +# l4F77dbtS+dJKacTKKanfWeA5opieF+yL4TXV5xcv3coKPHtbcMojyyPQDdPweGF +# RInECUzF1KVDL3SV9274eCBYLBNdYJWaPk8zhNqwiBfenk70lrC8RqBsmNLg1oiM +# CwIDAQABo4IB7TCCAekwEAYJKwYBBAGCNxUBBAMCAQAwHQYDVR0OBBYEFEhuZOVQ +# BdOCqhc3NyK1bajKdQKVMBkGCSsGAQQBgjcUAgQMHgoAUwB1AGIAQwBBMAsGA1Ud +# DwQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFHItOgIxkEO5FAVO +# 4eqnxzHRI4k0MFoGA1UdHwRTMFEwT6BNoEuGSWh0dHA6Ly9jcmwubWljcm9zb2Z0 +# LmNvbS9wa2kvY3JsL3Byb2R1Y3RzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcmwwXgYIKwYBBQUHAQEEUjBQME4GCCsGAQUFBzAChkJodHRwOi8vd3d3Lm1p +# Y3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dDIwMTFfMjAxMV8wM18y +# Mi5jcnQwgZ8GA1UdIASBlzCBlDCBkQYJKwYBBAGCNy4DMIGDMD8GCCsGAQUFBwIB +# FjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2RvY3MvcHJpbWFyeWNw +# cy5odG0wQAYIKwYBBQUHAgIwNB4yIB0ATABlAGcAYQBsAF8AcABvAGwAaQBjAHkA +# XwBzAHQAYQB0AGUAbQBlAG4AdAAuIB0wDQYJKoZIhvcNAQELBQADggIBAGfyhqWY +# 4FR5Gi7T2HRnIpsLlhHhY5KZQpZ90nkMkMFlXy4sPvjDctFtg/6+P+gKyju/R6mj +# 82nbY78iNaWXXWWEkH2LRlBV2AySfNIaSxzzPEKLUtCw/WvjPgcuKZvmPRul1LUd +# d5Q54ulkyUQ9eHoj8xN9ppB0g430yyYCRirCihC7pKkFDJvtaPpoLpWgKj8qa1hJ +# Yx8JaW5amJbkg/TAj/NGK978O9C9Ne9uJa7lryft0N3zDq+ZKJeYTQ49C/IIidYf +# wzIY4vDFLc5bnrRJOQrGCsLGra7lstnbFYhRRVg4MnEnGn+x9Cf43iw6IGmYslmJ +# aG5vp7d0w0AFBqYBKig+gj8TTWYLwLNN9eGPfxxvFX1Fp3blQCplo8NdUmKGwx1j +# NpeG39rz+PIWoZon4c2ll9DuXWNB41sHnIc+BncG0QaxdR8UvmFhtfDcxhsEvt9B +# xw4o7t5lL+yX9qFcltgA1qFGvVnzl6UJS0gQmYAf0AApxbGbpT9Fdx41xtKiop96 +# eiL6SJUfq/tHI4D1nvi/a7dLl+LrdXga7Oo3mXkYS//WsyNodeav+vyL6wuA6mk7 +# r/ww7QRMjt/fdW1jkT3RnVZOT7+AVyKheBEyIXrvQQqxP/uozKRdwaGIm1dxVk5I +# RcBCyZt2WwqASGv9eZ/BvW1taslScxMNelDNMYIVWzCCFVcCAQEwgZUwfjELMAkG +# A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx +# HjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEoMCYGA1UEAxMfTWljcm9z +# b2Z0IENvZGUgU2lnbmluZyBQQ0EgMjAxMQITMwAAAYdyF3IVWUDHCQAAAAABhzAN +# BglghkgBZQMEAgEFAKCBrjAZBgkqhkiG9w0BCQMxDAYKKwYBBAGCNwIBBDAcBgor +# BgEEAYI3AgELMQ4wDAYKKwYBBAGCNwIBFTAvBgkqhkiG9w0BCQQxIgQgOQvu7NUq +# wmve+qCoalj/s9HX5Hz9/zYISdJyOFTC4FIwQgYKKwYBBAGCNwIBDDE0MDKgFIAS +# AE0AaQBjAHIAbwBzAG8AZgB0oRqAGGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbTAN +# BgkqhkiG9w0BAQEFAASCAQAHbtGz0AChe0qMPM3c7iU8BQCfJklePUlAlhwFSuCx +# careoloxao+ZtS+dQRlrxLu/ZSqtmJHNsyRoWzsHdOs65pwUYhV3svzaXd7pJwkc +# nbDXedLBbNuQrQrrL2xbGtzT3U+EwgpJ1TTEYwHgqkTFogIelGa2sjD5N+4Vvalq +# t+vxaYrWwkTtsm0qczLKGRUjJqCjARjviE1xsOvs4zwbpXx/bEs/6M7U9tR+w/DS +# nDY/5KAKYET0DCVDhmsMmzJi3xXdBr4sAz0484AAB0CIRVgPCgdgr8E0NQUESJzm +# xm3K4bMAgTMWRiGTL4MRYSuMIn09sbfYXP9hjXLvTV4YoYIS5TCCEuEGCisGAQQB +# gjcDAwExghLRMIISzQYJKoZIhvcNAQcCoIISvjCCEroCAQMxDzANBglghkgBZQME +# AgEFADCCAVEGCyqGSIb3DQEJEAEEoIIBQASCATwwggE4AgEBBgorBgEEAYRZCgMB +# MDEwDQYJYIZIAWUDBAIBBQAEIJBynrmlQmGS0UNGTk53HVKEc4aHvNdYrs5eCcHM +# puc5AgZfEgElnvMYEzIwMjAwNzI0MTgwNDM3Ljg3NlowBIACAfSggdCkgc0wgcox +# CzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQLEyRNaWNyb3NvZnQg +# SXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJjAkBgNVBAsTHVRoYWxlcyBUU1Mg +# RVNOOkUwNDEtNEJFRS1GQTdFMSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFt +# cCBzZXJ2aWNloIIOPDCCBPEwggPZoAMCAQICEzMAAAEHfjdomIdaN9YAAAAAAQcw +# DQYJKoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0 +# b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3Jh +# dGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcN +# MTkxMDA4MTczODM1WhcNMjEwMTAzMTczODM1WjCByjELMAkGA1UEBhMCVVMxCzAJ +# BgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQg +# Q29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJhdGlv +# bnMgTGltaXRlZDEmMCQGA1UECxMdVGhhbGVzIFRTUyBFU046RTA0MS00QkVFLUZB +# N0UxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIHNlcnZpY2UwggEiMA0G +# CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDUuqOUlbaeWirgwbCwhhNIOqTshpo+ +# QdSYxAt9JnkeulQFeKrQ6rOSECXxwgOjL/TNMIXtkig1MaifFON6si/Ri+AsV8Gu +# rQp4fylJzLDMFdJcGSpV3CGRdpDb0au8kNQLmnZuxLxAL91R7//3mH2QDQI20w3G +# 06s+Xv8+js9wQksXAfclXX1TJoBIx1Pi1FGqCnY3KlW81+Plhz0T4yStm1MgnqH4 +# RKYyPdcempCYC/BI04Ph2EJL+uQQfAfYdbf9vGqpKYjsuktnWr5uowD3H5At+x3l +# YH5rz4JCleKjeLpB/j74H7VZ0I5eTEbls9e2lEKaUzb9o0wjnjDc+t4BAgMBAAGj +# ggEbMIIBFzAdBgNVHQ4EFgQUNOHjlxlIJXMcP9n/0ogYdX8p6HcwHwYDVR0jBBgw +# FoAU1WM6XIoxkPNDe3xGG8UzaFqFbVUwVgYDVR0fBE8wTTBLoEmgR4ZFaHR0cDov +# L2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMvTWljVGltU3RhUENB +# XzIwMTAtMDctMDEuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggrBgEFBQcwAoY+aHR0 +# cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNUaW1TdGFQQ0FfMjAx +# MC0wNy0wMS5jcnQwDAYDVR0TAQH/BAIwADATBgNVHSUEDDAKBggrBgEFBQcDCDAN +# BgkqhkiG9w0BAQsFAAOCAQEAGN3/7XWSzHGKjk444w+2q1D3k7Bh/ZahUvWHFJ6E +# UKU5vLzEGsdsgJSvWXHZDRrpf5rcUGQyjnlo1hAY1mDteNKFushS6bedxcxPHJje +# lVZ9N2/e5+/7zLu18YjnKw5bFu7dWqYBMI3J0FOr56XJOJ1KTtMiJhpxuib+FWy+ +# pyhVVgHGTUHuUdbE09dY9WxuRsbpb4DdWAWNrPDB6VAOO50QfEj+0tW+zF6h3RhB +# TI0ilj0+AzgXE+6DyJ7/br6aVvCEvNRJzE6akJnMyn/kzmC32LxvRZWKEwWDR0Fn +# zeXj5ynSStZ6iifTBP7gqiDsidguxh+BFX7HxhN1eHf7jTCCBnEwggRZoAMCAQIC +# CmEJgSoAAAAAAAIwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYD +# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy +# b3NvZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRp +# ZmljYXRlIEF1dGhvcml0eSAyMDEwMB4XDTEwMDcwMTIxMzY1NVoXDTI1MDcwMTIx +# NDY1NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNV +# BAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQG +# A1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggEiMA0GCSqGSIb3 +# DQEBAQUAA4IBDwAwggEKAoIBAQCpHQ28dxGKOiDs/BOX9fp/aZRrdFQQ1aUKAIKF +# ++18aEssX8XD5WHCdrc+Zitb8BVTJwQxH0EbGpUdzgkTjnxhMFmxMEQP8WCIhFRD +# DNdNuDgIs0Ldk6zWczBXJoKjRQ3Q6vVHgc2/JGAyWGBG8lhHhjKEHnRhZ5FfgVSx +# z5NMksHEpl3RYRNuKMYa+YaAu99h/EbBJx0kZxJyGiGKr0tkiVBisV39dx898Fd1 +# rL2KQk1AUdEPnAY+Z3/1ZsADlkR+79BL/W7lmsqxqPJ6Kgox8NpOBpG2iAg16Hgc +# sOmZzTznL0S6p/TcZL2kAcEgCZN4zfy8wMlEXV4WnAEFTyJNAgMBAAGjggHmMIIB +# 4jAQBgkrBgEEAYI3FQEEAwIBADAdBgNVHQ4EFgQU1WM6XIoxkPNDe3xGG8UzaFqF +# bVUwGQYJKwYBBAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud +# EwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYD +# VR0fBE8wTTBLoEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwv +# cHJvZHVjdHMvTWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEB +# BE4wTDBKBggrBgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9j +# ZXJ0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwgaAGA1UdIAEB/wSBlTCB +# kjCBjwYJKwYBBAGCNy4DMIGBMD0GCCsGAQUFBwIBFjFodHRwOi8vd3d3Lm1pY3Jv +# c29mdC5jb20vUEtJL2RvY3MvQ1BTL2RlZmF1bHQuaHRtMEAGCCsGAQUFBwICMDQe +# MiAdAEwAZQBnAGEAbABfAFAAbwBsAGkAYwB5AF8AUwB0AGEAdABlAG0AZQBuAHQA +# LiAdMA0GCSqGSIb3DQEBCwUAA4ICAQAH5ohRDeLG4Jg/gXEDPZ2joSFvs+umzPUx +# vs8F4qn++ldtGTCzwsVmyWrf9efweL3HqJ4l4/m87WtUVwgrUYJEEvu5U4zM9GAS +# inbMQEBBm9xcF/9c+V4XNZgkVkt070IQyK+/f8Z/8jd9Wj8c8pl5SpFSAK84Dxf1 +# L3mBZdmptWvkx872ynoAb0swRCQiPM/tA6WWj1kpvLb9BOFwnzJKJ/1Vry/+tuWO +# M7tiX5rbV0Dp8c6ZZpCM/2pif93FSguRJuI57BlKcWOdeyFtw5yjojz6f32WapB4 +# pm3S4Zz5Hfw42JT0xqUKloakvZ4argRCg7i1gJsiOCC1JeVk7Pf0v35jWSUPei45 +# V3aicaoGig+JFrphpxHLmtgOR5qAxdDNp9DvfYPw4TtxCd9ddJgiCGHasFAeb73x +# 4QDf5zEHpJM692VHeOj4qEir995yfmFrb3epgcunCaw5u+zGy9iCtHLNHfS4hQEe +# gPsbiSpUObJb2sgNVZl6h3M7COaYLeqN4DMuEin1wC9UJyH3yKxO2ii4sanblrKn +# QqLJzxlBTeCG+SqaoxFmMNO7dDJL32N79ZmKLxvHIa9Zta7cRDyXUHHXodLFVeNp +# 3lfB0d4wwP3M5k37Db9dT+mdHhk4L7zPWAUu7w2gUDXa7wknHNWzfjUeCLraNtvT +# X4/edIhJEqGCAs4wggI3AgEBMIH4oYHQpIHNMIHKMQswCQYDVQQGEwJVUzELMAkG +# A1UECBMCV0ExEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD +# b3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3BlcmF0aW9u +# cyBMaW1pdGVkMSYwJAYDVQQLEx1UaGFsZXMgVFNTIEVTTjpFMDQxLTRCRUUtRkE3 +# RTElMCMGA1UEAxMcTWljcm9zb2Z0IFRpbWUtU3RhbXAgc2VydmljZaIjCgEBMAcG +# BSsOAwIaAxUAwwu+tfgG3rC7RZrxuFO2CmZSfPiggYMwgYCkfjB8MQswCQYDVQQG +# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG +# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQg +# VGltZS1TdGFtcCBQQ0EgMjAxMDANBgkqhkiG9w0BAQUFAAIFAOLFEVUwIhgPMjAy +# MDA3MjQxNTUwNDVaGA8yMDIwMDcyNTE1NTA0NVowdzA9BgorBgEEAYRZCgQBMS8w +# LTAKAgUA4sURVQIBADAKAgEAAgIa9QIB/zAHAgEAAgIR9DAKAgUA4sZi1QIBADA2 +# BgorBgEEAYRZCgQCMSgwJjAMBgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIB +# AAIDAYagMA0GCSqGSIb3DQEBBQUAA4GBADwvhE9bln801RR+oEXjtPJXTqtYMakR +# ymItUlO2HRorDqEv2SJR/V/kQjcsqS6ig54bOiKs0Il2fW/s/pi+x1ydJMpOyhM7 +# zzqm3acQ9kbYHIDoPWVT/Rq2Oo33Dq380zXENcc0hpLAKF3Cu06SbbNbqu+A/wbI +# z5IClz6kU8kiMYIDDTCCAwkCAQEwgZMwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgT +# Cldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29m +# dCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENB +# IDIwMTACEzMAAAEHfjdomIdaN9YAAAAAAQcwDQYJYIZIAWUDBAIBBQCgggFKMBoG +# CSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG9w0BCQQxIgQg6+NCew+c +# OhYIOzhUKofOF7MxtgOvSMWQCMCIWlTFNMgwgfoGCyqGSIb3DQEJEAIvMYHqMIHn +# MIHkMIG9BCBBYvCj4pFkwhumagATn0gLh9fdDNzImQkKNeOtRj/LHjCBmDCBgKR+ +# MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdS +# ZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMT +# HU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMzAAABB343aJiHWjfWAAAA +# AAEHMCIEIGIH6vLdbEFNnxTxBhtIN7CtmhcKy/9m6/xoAA3LHzXUMA0GCSqGSIb3 +# DQEBCwUABIIBAKGg3zNulscnGBDlD6Q/U6yLQ5dN3gF9UrprgACiQ1gs/DexU7oC +# hjNZxBnH5RTA/7q9TFf2a1rBydHWVnqXuuQQJ0HuskdpXahxR4y1jboDdGwr7F08 +# v/gmPeeUik28Je72QZp5m/R0O61/kMQaDpLO9iPH0Z9iMGfqJonFPDeY4VX8Da2n +# cPY7mrv6YAI+ydZ+mUdBp2yjas7+/N8MntcNtAO0HpWFXQTAmb77RrSssfeZphRA +# mBD+gLx5C3q4uSmuOqaQxUaF0y8FeuetHp0bw2sfce6GlMXJwzTpC6HvXnaVtMy0 +# pgzd/KPHW7EgSvmRVKmvwiQGiZBoRG/Gcg8= +# SIG # End signature block diff --git a/vcpkg/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 b/vcpkg/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 new file mode 100644 index 0000000..b741bb8 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/deploy-visual-studio.ps1 @@ -0,0 +1,42 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +param([string]$SasToken) + +if (Test-Path "$PSScriptRoot/utility-prefix.ps1") { + . "$PSScriptRoot/utility-prefix.ps1" +} + +# See https://learn.microsoft.com/visualstudio/releases/2022/release-history +# 17.14.17 +$VisualStudioBootstrapperUrl = 'https://download.visualstudio.microsoft.com/download/pr/5967a899-96aa-47e2-a7c5-1b7192f292ee/74cdb7178d623f27d405946de1860f7ee67acba537a9e43ce4b2d2ee87bd75b4/vs_Enterprise.exe' +$Workloads = @( + 'Microsoft.VisualStudio.Workload.NativeDesktop', + 'Microsoft.VisualStudio.Workload.Universal', + 'Microsoft.VisualStudio.Component.UWP.VC.ARM64', + 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64', + 'Microsoft.VisualStudio.Component.VC.Tools.ARM64', + 'Microsoft.VisualStudio.Component.VC.ASAN', + 'Microsoft.VisualStudio.Component.VC.ATL', + 'Microsoft.VisualStudio.Component.VC.ATLMFC', + 'Microsoft.VisualStudio.Component.VC.ATL.ARM64', + 'Microsoft.VisualStudio.Component.VC.MFC.ARM64', + 'Microsoft.VisualStudio.Component.Windows11SDK.26100', + 'Microsoft.VisualStudio.Component.Windows10SDK.19041', # As of 2024-11-15, CMake explicitly needs a Windows 10 SDK for Store + # These .NET parts are needed for easyhook, openni2 + 'Microsoft.Net.Component.4.8.SDK', + 'Microsoft.Net.Component.4.7.2.TargetingPack', + 'Microsoft.Component.NetFX.Native', + 'Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset', + 'Microsoft.VisualStudio.Component.VC.Llvm.Clang', + 'Microsoft.VisualStudio.ComponentGroup.UWP.VC.BuildTools', + 'Microsoft.VisualStudio.Component.VC.CMake.Project' +) + +$vsArgs = @('--quiet', '--norestart', '--wait', '--nocache') +foreach ($workload in $Workloads) { + $vsArgs += '--add' + $vsArgs += $workload +} + +DownloadAndInstall -Name 'Visual Studio' -Url $VisualStudioBootstrapperUrl -Args $vsArgs diff --git a/vcpkg/scripts/azure-pipelines/windows/disk-space.ps1 b/vcpkg/scripts/azure-pipelines/windows/disk-space.ps1 new file mode 100644 index 0000000..b3b4086 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/disk-space.ps1 @@ -0,0 +1,35 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +<# +.SYNOPSIS +Prints total and free disk space for each disk on the system +#> + +Function Format-Size { + [CmdletBinding()] + Param([long]$Size) + + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size B" + } + + $Size = $Size / 1024 + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size KiB" + } + + $Size = $Size / 1024 + if ($Size -lt 1024) { + $Size = [int]$Size + return "$Size MiB" + } + + $Size = [int]($Size / 1024) + return "$Size GiB" +} + +Get-CimInstance -ClassName Win32_LogicalDisk | Format-Table -Property @{Label="Disk"; Expression={ $_.DeviceID }},@{Label="Label"; Expression={ $_.VolumeName }},@{Label="Size"; Expression={ Format-Size($_.Size) }},@{Label="Free Space"; Expression={ Format-Size($_.FreeSpace) }} diff --git a/vcpkg/scripts/azure-pipelines/windows/provision-entire-image.ps1 b/vcpkg/scripts/azure-pipelines/windows/provision-entire-image.ps1 new file mode 100644 index 0000000..7adc13f --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/provision-entire-image.ps1 @@ -0,0 +1,21 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +# This script runs all the scripts we run on Azure machines to deploy prerequisites, +# and assumes it is being run as an admin user. + +. "$PSScriptRoot\deploy-tlssettings.ps1" -RebootIfRequired 0 +. "$PSScriptRoot\deploy-visual-studio.ps1" +. "$PSScriptRoot\deploy-mpi.ps1" +. "$PSScriptRoot\deploy-cuda.ps1" +. "$PSScriptRoot\deploy-cudnn.ps1" +. "$PSScriptRoot\deploy-inteloneapi.ps1" +. "$PSScriptRoot\deploy-pwsh.ps1" +. "$PSScriptRoot\deploy-azure-cli.ps1" +. "$PSScriptRoot\deploy-azcopy.ps1" +try { + Copy-Item "$PSScriptRoot\deploy-settings.txt" "$PSScriptRoot\deploy-settings.ps1" + . "$PSScriptRoot\deploy-settings.ps1" +} finally { + Remove-Item "$PSScriptRoot\deploy-settings.ps1" +} diff --git a/vcpkg/scripts/azure-pipelines/windows/sysprep.ps1 b/vcpkg/scripts/azure-pipelines/windows/sysprep.ps1 new file mode 100644 index 0000000..2af2ae9 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/sysprep.ps1 @@ -0,0 +1,19 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT +# + +param([string]$SasToken) + +<# +.SYNOPSIS +Prepares the virtual machine for imaging. + +.DESCRIPTION +Runs the `sysprep` utility to prepare the system for imaging. +See https://docs.microsoft.com/en-us/windows-hardware/manufacture/desktop/sysprep--system-preparation--overview +for more information. +#> + +$ErrorActionPreference = 'Stop' +Write-Host 'Running sysprep' +& C:\Windows\system32\sysprep\sysprep.exe /oobe /generalize /mode:vm /shutdown diff --git a/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1 b/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1 new file mode 100644 index 0000000..2e0b0f0 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/utility-prefix.ps1 @@ -0,0 +1,156 @@ +# Copyright (c) Microsoft Corporation. +# SPDX-License-Identifier: MIT + +<# +.SYNOPSIS +Gets a random file path in the temp directory. + +.DESCRIPTION +Get-TempFilePath takes an extension, and returns a path with a random +filename component in the temporary directory with that extension. + +.PARAMETER Extension +The extension to use for the path. +#> +Function Get-TempFilePath { + Param( + [String]$Extension + ) + + $tempPath = [System.IO.Path]::GetTempPath() + $tempName = [System.IO.Path]::GetRandomFileName() + if (-not [String]::IsNullOrWhiteSpace($Extension)) { + $tempName = $tempName + '.' + $Extension + } + return Join-Path $tempPath $tempName +} + +<# +.SYNOPSIS +Download and install a component. + +.DESCRIPTION +DownloadAndInstall downloads an executable from the given URL, and runs it with the given command-line arguments. + +.PARAMETER Name +The name of the component, to be displayed in logging messages. + +.PARAMETER Url +The URL of the installer. + +.PARAMETER Args +The command-line arguments to pass to the installer. +#> +Function DownloadAndInstall { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$Name, + [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][String[]]$Args, + [String]$LocalName = $null + ) + + try { + if ([string]::IsNullOrWhiteSpace($LocalName)) { + $LocalName = [uri]::new($Url).Segments[-1] + } + + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local $Name..." + } else { + Write-Host "Downloading $Name..." + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $LocalPath = Join-Path $tempPath $LocalName + curl.exe --fail -L -o $LocalPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } + + Write-Host "Installing $Name..." + $proc = Start-Process -FilePath $LocalPath -ArgumentList $Args -Wait -PassThru + $exitCode = $proc.ExitCode + + if ($exitCode -eq 0) { + Write-Host 'Installation successful!' + } elseif ($exitCode -eq 3010) { + Write-Host 'Installation successful! Exited with 3010 (ERROR_SUCCESS_REBOOT_REQUIRED).' + } else { + Write-Error "Installation failed! Exited with $exitCode." + } + + if ($doRemove) { + Remove-Item -Path $LocalPath -Force + } + } catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" + } +} + +<# +.SYNOPSIS +Download and install a zip file component. + +.DESCRIPTION +DownloadAndUnzip downloads a zip from the given URL, and extracts it to the indicated path. + +.PARAMETER Name +The name of the component, to be displayed in logging messages. + +.PARAMETER Url +The URL of the zip to download. + +.PARAMETER Destination +The location to which the zip should be extracted +#> +Function DownloadAndUnzip { + [CmdletBinding(PositionalBinding=$false)] + Param( + [Parameter(Mandatory)][String]$Name, + [Parameter(Mandatory)][String]$Url, + [Parameter(Mandatory)][String]$Destination + ) + + try { + $fileName = [uri]::new($Url).Segments[-1] + if ([string]::IsNullOrWhiteSpace($LocalName)) { + $LocalName = $fileName + } + + [string]$zipPath + [bool]$doRemove = $false + [string]$LocalPath = Join-Path $PSScriptRoot $LocalName + if (Test-Path $LocalPath) { + Write-Host "Using local $Name..." + $zipPath = $LocalPath + } else { + $tempPath = Get-TempFilePath + New-Item -ItemType Directory -Path $tempPath -Force | Out-Null + $zipPath = Join-Path $tempPath $LocalName + Write-Host "Downloading $Name ( $Url -> $zipPath )..." + curl.exe --fail -L -o $zipPath $Url + if (-Not $?) { + Write-Error 'Download failed!' + } + $doRemove = $true + } + + Write-Host "Installing $Name to $Destination..." + & tar.exe -xvf $zipPath --strip 1 --directory $Destination + if ($LASTEXITCODE -eq 0) { + Write-Host 'Installation successful!' + } else { + Write-Error "Installation failed! Exited with $LASTEXITCODE." + } + + if ($doRemove) { + Remove-Item -Path $zipPath -Force + } + } catch { + Write-Error "Installation failed! Exception: $($_.Exception.Message)" + } +} diff --git a/vcpkg/scripts/azure-pipelines/windows/validate-version-files.ps1 b/vcpkg/scripts/azure-pipelines/windows/validate-version-files.ps1 new file mode 100644 index 0000000..32b9ba7 --- /dev/null +++ b/vcpkg/scripts/azure-pipelines/windows/validate-version-files.ps1 @@ -0,0 +1,29 @@ +./vcpkg.exe --feature-flags=versions x-ci-verify-versions --verbose | +ForEach-Object -Begin { + $long_error = '' +} -Process { + if ($long_error -ne '' -and $_ -match '^$|^ ') { + # Extend multi-line message + $long_error = -join($long_error, "%0D%0A", $_ -replace '^ ','' ` + -replace '(git add) [^ ]*\\ports\\([^ ]*)', '$1 ports/$2' ) + } else { + if ($long_error -ne '') { + # Flush multi-line message + $long_error + $long_error = '' + } + if ($_ -match '^Error: ') { + # Start multi-line message + $long_error = $_ -replace '^Error: ', '##vso[task.logissue type=error]' ` + -replace '(^##vso[^\]]*)](.*) [^ ]*\\versions\\(.-)\\(.*.json)(.*)', '$1;sourcepath=versions/$3/$4;linenumber=2]$2 version/$3/$4$5' + } else { + # Normal line + $_ + } + } +} -End { + if ($long_error -ne '') { + # Flush multi-line message + $long_error + } +} diff --git a/vcpkg/scripts/boost/.gitignore b/vcpkg/scripts/boost/.gitignore new file mode 100644 index 0000000..f8e3128 --- /dev/null +++ b/vcpkg/scripts/boost/.gitignore @@ -0,0 +1,3 @@ +/boost
+/downloads
+/libs
\ No newline at end of file diff --git a/vcpkg/scripts/boost/generate-ports.ps1 b/vcpkg/scripts/boost/generate-ports.ps1 new file mode 100644 index 0000000..3eda8c5 --- /dev/null +++ b/vcpkg/scripts/boost/generate-ports.ps1 @@ -0,0 +1,750 @@ +[CmdletBinding()]
+param (
+ $libraries = @(),
+ $version = "1.89.0",
+# This script treats support statements as platform expressions. This is incorrect
+# in a few cases e.g. boost-parameter-python not depending on boost-python for uwp since
+# boost-python is not supported on uwp. Update $suppressPlatformForDependency as needed,
+# don't blindly stage/commit changes containing platform expressions in dependencies.
+ $portsDir = $null,
+ $vcpkg = $null
+)
+
+$ErrorActionPreference = 'Stop'
+
+$scriptsBoostDir = split-path -parent $MyInvocation.MyCommand.Definition
+if ($null -eq $portsDir) {
+ $portsDir = "$scriptsBoostDir/../../ports"
+}
+if ($null -eq $vcpkg) {
+ $vcpkg = "$scriptsBoostDir/../../vcpkg"
+ if ($IsWindows) {
+ $vcpkg = "$vcpkg.exe"
+ }
+}
+
+# Beta builds contains a text in the version string
+$semverVersion = ($version -replace "(\d+(\.\d+){1,3}).*", "`$1")
+
+# Clear this array when moving to a new boost version
+$defaultPortVersion = 0
+$portVersions = @{
+}
+
+function Get-PortVersion {
+ param (
+ [string]$PortName
+ )
+
+ $nonDefault = $portVersions[$PortName]
+ if ($null -ne $nonDefault) {
+ return $nonDefault
+ }
+
+ return $defaultPortVersion
+}
+
+$portData = @{
+ "boost" = @{
+ "features" = @{
+ "mpi" = @{
+ "description" = "Build with MPI support";
+ "dependencies" = @("boost-mpi", "boost-graph-parallel", "boost-property-map-parallel");
+ }
+ }
+ };
+ "boost-asio" = @{
+ "default-features" = @("deadline-timer"; @{ "name" = "spawn"; "platform" = "!uwp & !emscripten" };);
+ "features" = @{
+ "ssl" = @{
+ "description" = "Build with SSL support";
+ "dependencies" = @(@{ "name" = "openssl"; "platform" = "!emscripten" });
+ };
+ "deadline-timer" = @{
+ "description" = "Build with deadline_timer support";
+ "dependencies" = @("boost-date-time");
+ }
+ "spawn" = @{
+ "description" = "Build with spawn (stackful coroutines) support";
+ "dependencies" = @(@{ "name" = "boost-context"; "platform" = "!uwp & !emscripten" });
+ };
+ }
+ };
+ "boost-beast" = @{ "supports" = "!emscripten" };
+ "boost-cmake" = @{ "dependencies" = @(@{ "name" = "vcpkg-boost"; "host" = $true }); };
+ "boost-cobalt" = @{ "supports" = "!uwp" };
+ "boost-context" = @{ "supports" = "!uwp & !emscripten" };
+ "boost-coroutine" = @{ "supports" = "!(arm & windows) & !uwp & !emscripten" };
+ "boost-dll" = @{ "supports" = "!uwp" };
+ "boost-fiber" = @{
+ "supports" = "!uwp & !(arm & windows) & !emscripten";
+ "features" = @{
+ "numa" = @{
+ "description" = "Enable NUMA support";
+ }
+ }
+ };
+ "boost-filesystem" = @{ "supports" = "!uwp" };
+ "boost-geometry" = @{
+ "dependencies" = @("boost-crc", "boost-program-options");
+ "supports" = "!uwp";
+ };
+ "boost-graph" = @{ "supports" = "!uwp" };
+ "boost-graph-parallel" = @{
+ "dependencies" = @("mpi");
+ "supports" = "!uwp";
+ };
+ "boost-iostreams" = @{
+ "default-features" = @("bzip2", "lzma", "zlib", "zstd");
+ "supports" = "!uwp";
+ "features" = @{
+ "bzip2" = @{
+ "description" = "Support bzip2 filters";
+ "dependencies" = @("bzip2");
+ };
+ "lzma" = @{
+ "description" = "Support LZMA/xz filters";
+ "dependencies" = @("liblzma");
+ };
+ "zlib" = @{
+ "description" = "Support zlib filters";
+ "dependencies" = @("zlib");
+ };
+ "zstd" = @{
+ "description" = "Support zstd filters";
+ "dependencies" = @("zstd");
+ };
+ };
+ };
+ "boost-locale" = @{
+ "dependencies" = @(@{ "name" = "libiconv"; "platform" = "!uwp & !windows & !mingw" });
+ "supports" = "!uwp";
+ "features" = @{
+ "icu" = @{
+ "description" = "ICU backend for Boost.Locale";
+ "dependencies" = @("icu");
+ }
+ }
+ };
+ "boost-log" = @{ "supports" = "!uwp & !emscripten" };
+ "boost-math" = @{
+ "features" = @{
+ "legacy" = @{
+ "description" = "Build the legacy C99 and TR1 libraries";
+ }
+ }
+ };
+ "boost-mpi" = @{
+ "dependencies" = @("mpi");
+ "supports" = "!uwp";
+ "features" = @{
+ "python3" = @{
+ "description" = "Build Python3 bindings";
+ "supports" = "!static";
+ "dependencies" = @(@{ "name" = "boost-python"; "platform" = "!uwp & !emscripten & !ios & !android" }, "python3");
+ }
+ }
+ };
+ "boost-mqtt5" = @{ "supports" = "!uwp" };
+ "boost-mysql" = @{ "dependencies" = @("openssl"); };
+ "boost-odeint" = @{
+ "features" = @{
+ "mpi" = @{
+ "description" = "Support parallelization with MPI";
+ "dependencies" = @("boost-mpi");
+ }
+ }
+ };
+ "boost-process" = @{ "supports" = "!uwp & !emscripten & !android" };
+ "boost-python" = @{ "supports" = "!uwp & !emscripten & !ios & !android"; "dependencies" = @("python3");};
+ "boost-random" = @{ "supports" = "!uwp" };
+ "boost-regex" = @{
+ "features" = @{
+ "icu" = @{
+ "description" = "ICU backend for Boost.Regex";
+ "dependencies" = @("icu");
+ }
+ }
+ }
+ "boost-stacktrace" = @{
+ "default-features" = @(@{ "name" = "backtrace"; "platform" = "!windows" }; @{ "name" = "windbg"; "platform" = "windows" });
+ "supports" = "!uwp";
+ "features" = @{
+ "backtrace" = @{
+ "description" = "Use boost_stacktrace_backtrace";
+ "supports" = "!windows";
+ "dependencies" = @(@{ "name" = "libbacktrace"; "platform" = "!windows" });
+ };
+ "windbg" = @{
+ "description" = "Use boost_stacktrace_windbg";
+ "supports" = "windows";
+ };
+ }
+ };
+ "boost-test" = @{ "supports" = "!uwp" };
+ "boost-wave" = @{ "supports" = "!uwp" };
+}
+
+# For some dependent ports (LHS), the dependency's [RHS] "supports" is enough,
+# and no "platform" field shall be added to the dependency.
+$suppressPlatformForDependency = @{
+ "boost-coroutine2" = @("boost-context");
+ "boost-dll" = @("boost-filesystem");
+ "boost-process" = @("boost-filesystem");
+ "boost-geometry" = @("boost-graph");
+ "boost-graph" = @("boost-random");
+ "boost-graph-parallel" = @("boost-filesystem", "boost-graph", "boost-mpi", "boost-random");
+ "boost-log" = @("boost-filesystem");
+ "boost-mpi" = @("boost-graph");
+ "boost-mqtt5" = @("boost-random");
+ "boost-parameter-python" = @("boost-python");
+ "boost-property-map-parallel" = @("boost-mpi");
+ "boost-python" = @("boost-graph");
+ "boost-wave" = @("boost-filesystem");
+}
+
+function GeneratePortName() {
+ param (
+ [string]$Library
+ )
+ "boost-" + ($Library -replace "_", "-")
+}
+
+function GeneratePortHash() {
+ param (
+ [string]$Archive
+ )
+ $hash = & $vcpkg --x-wait-for-lock hash $Archive
+ # Remove prefix "Waiting to take filesystem lock on <path>/.vcpkg-root... "
+ if ($hash -is [Object[]]) {
+ $hash = $hash[1]
+ }
+ return $hash
+}
+
+function GetPortHomepage() {
+ param (
+ [string]$Library
+ )
+ $specicalHomepagePaths = @{
+ "build" = "https://github.com/boostorg/build";
+ "cmake" = "https://github.com/boostorg/cmake";
+ "interval" = "https://www.boost.org/libs/numeric/interval";
+ "numeric_conversion" = "https://www.boost.org/libs/numeric/conversion";
+ "odeint" = "https://www.boost.org/libs/numeric/odeint";
+ "ublas" = "https://www.boost.org/libs/numeric/ublas";
+ }
+ if ($specicalHomepagePaths.ContainsKey($Library)) {
+ $homepagePath = $specicalHomepagePaths[$Library]
+ } else {
+ $homepagePath = "https://www.boost.org/libs/" + $Library
+ }
+ return $homepagePath
+}
+
+function GeneratePortDependency() {
+ param (
+ [string]$Library = '',
+ [string]$PortName = '',
+ [string]$ForLibrary = ''
+ )
+ if ($PortName -eq '') {
+ $PortName = GeneratePortName $Library
+ }
+ $forPortName = GeneratePortName $ForLibrary
+ if ($suppressPlatformForDependency.Contains($forPortName) -and $suppressPlatformForDependency[$forPortName].Contains($PortName)) {
+ $PortName
+ }
+ elseif ($portData.Contains($PortName) -and $portData[$PortName].Contains('supports')) {
+ @{name = $PortName; platform = $portData[$PortName]['supports'] }
+ }
+ elseif ($ForLibrary -eq '' -and $suppressPlatformForDependency.Contains($PortName)) {
+ # For 'boost'.
+ $platform = $suppressPlatformForDependency[$PortName] `
+ | ForEach-Object { (GeneratePortDependency -PortName $_).platform } `
+ | Group-Object -NoElement `
+ | Join-String -Property Name -Separator ' & '
+ if ($platform -ne '') {
+ @{name = $PortName; platform = $platform }
+ }
+ else {
+ $PortName
+ }
+ }
+ else {
+ $PortName
+ }
+}
+
+function AddBoostVersionConstraints() {
+ param (
+ $Dependencies = @()
+ )
+
+ $updatedDependencies = @()
+ foreach ($dependency in $Dependencies) {
+ if ($dependency.Contains("name")) {
+ if ($dependency.name.StartsWith("boost")) {
+ $dependency["version>="] = $semverVersion
+ }
+ }
+ else {
+ if ($dependency.StartsWith("boost")) {
+ $dependency = @{
+ "name" = $dependency
+ "version>=" = $semverVersion
+ }
+ }
+ }
+ $updatedDependencies += $dependency
+ }
+ $updatedDependencies
+}
+
+function GeneratePortManifest() {
+ param (
+ [string]$PortName,
+ [string]$Homepage,
+ [string]$Description,
+ [string]$License,
+ $Dependencies = @()
+ )
+ $manifest = @{
+ "`$comment" = "Automatically generated by scripts/boost/generate-ports.ps1"
+ "name" = $PortName
+ "homepage" = $Homepage
+ "description" = $Description
+ }
+ if ($version -eq $semverVersion) {
+ $manifest["version"] = $version
+ }
+ else {
+ $manifest["version-string"] = $version
+ }
+ if ($License) {
+ $manifest["license"] += $License
+ }
+ if ($portData.Contains($PortName)) {
+ $manifest += $portData[$PortName]
+ }
+ $thisPortVersion = Get-PortVersion $PortName
+ if ($thisPortVersion -ne 0) {
+ $manifest["port-version"] = $thisPortVersion
+ }
+ if ($Dependencies.Count -gt 0) {
+ $manifest["dependencies"] += $Dependencies
+ }
+ # Remove from the dependencies the ports that are included in the feature dependencies
+ if ($manifest.Contains('features') -and $manifest.Contains('dependencies')) {
+ foreach ($feature in $manifest.features.Keys) {
+ $feature_dependencies = $manifest.features.$feature["dependencies"]
+ foreach ($dependency in $feature_dependencies) {
+ if ($dependency.Contains("name")) {
+ $dep_name = $dependency.name
+ }
+ else {
+ $dep_name = $dependency
+ }
+ $manifest["dependencies"] = $manifest["dependencies"] `
+ | Where-Object {
+ if ($_.Contains("name")) {
+ $_.name -notmatch "$dep_name"
+ }
+ else {
+ $_ -notmatch "$dep_name"
+ }
+ }
+ }
+ }
+ }
+
+ # Add version constraints to boost dependencies
+ $manifest["dependencies"] = @(AddBoostVersionConstraints $manifest["dependencies"])
+ foreach ($feature in $manifest.features.Keys) {
+ $manifest.features.$feature["dependencies"] = @(AddBoostVersionConstraints $manifest.features.$feature["dependencies"])
+ }
+
+ $manifest | ConvertTo-Json -Depth 10 -Compress `
+ | Out-File -Encoding UTF8 "$portsDir/$PortName/vcpkg.json"
+ & $vcpkg format-manifest "$portsDir/$PortName/vcpkg.json"
+}
+
+function GeneratePort() {
+ param (
+ [string]$Library,
+ [string]$Archive,
+ [bool]$NeedsBuild = $true,
+ $Dependencies = @()
+ )
+
+ $portName = GeneratePortName $Library
+ $portHash = GeneratePortHash $Archive
+ $homepage = GetPortHomepage $Library
+
+ New-Item -ItemType "Directory" "$portsDir/$portName" -erroraction SilentlyContinue | out-null
+
+ # Generate vcpkg.json
+ GeneratePortManifest `
+ -PortName $portName `
+ -Homepage $homepage `
+ -Description "Boost $Library module" `
+ -License "BSL-1.0" `
+ -Dependencies $Dependencies
+
+ $portfileLines = @(
+ "# Automatically generated by scripts/boost/generate-ports.ps1"
+ ""
+ )
+
+ if (Test-Path "$scriptsBoostDir/pre-source-stubs/$Library.cmake") {
+ $portfileLines += @(
+ Get-Content "$scriptsBoostDir/pre-source-stubs/$Library.cmake"
+ ""
+ )
+ }
+
+ $portfileLines += @(
+ "vcpkg_from_github(",
+ " OUT_SOURCE_PATH SOURCE_PATH",
+ " REPO boostorg/$Library",
+ " REF boost-`${VERSION}",
+ " SHA512 $portHash",
+ " HEAD_REF master"
+ )
+
+ [string[]]$patches = @()
+ $patches += Get-ChildItem -Path "$portsDir/$portName/*" -Name -Include @('*.patch', '*.diff')
+ if (Test-Path "$scriptsBoostDir/patch-stubs/$Library.txt") {
+ $patches += Get-Content "$scriptsBoostDir/patch-stubs/$Library.txt"
+ }
+
+ if ($patches.Length -ne 0) {
+ $portfileLines += @(" PATCHES")
+ foreach ($patch in $patches) {
+ $portfileLines += " $patch"
+ }
+ }
+ $portfileLines += @(
+ ")"
+ ""
+ )
+
+ if (Test-Path "$scriptsBoostDir/post-source-stubs/$Library.cmake") {
+ $portfileLines += @(Get-Content "$scriptsBoostDir/post-source-stubs/$Library.cmake")
+ }
+
+ if ($NeedsBuild) {
+ $portfileLines += @(
+ "set(FEATURE_OPTIONS `"`")"
+ )
+ if (Test-Path "$portsDir/$portName/features.cmake") {
+ $portfileLines += @(
+ "include(`"`${CMAKE_CURRENT_LIST_DIR}/features.cmake`")"
+ )
+ }
+
+ if (Test-Path "$scriptsBoostDir/pre-build-stubs/$Library.cmake") {
+ $portfileLines += Get-Content "$scriptsBoostDir/pre-build-stubs/$Library.cmake"
+ }
+
+ $portfileLines += @(
+ "boost_configure_and_install("
+ " SOURCE_PATH `"`${SOURCE_PATH}`""
+ " OPTIONS `${FEATURE_OPTIONS}"
+ ")"
+ )
+
+ if (Test-Path "$scriptsBoostDir/post-build-stubs/$Library.cmake") {
+ $portfileLines += @(Get-Content "$scriptsBoostDir/post-build-stubs/$Library.cmake")
+ }
+ }
+
+ $portfileLines += @("")
+ Set-Content -LiteralPath "$portsDir/$portName/portfile.cmake" `
+ -Value "$($portfileLines -join "`n")" `
+ -Encoding UTF8 `
+ -NoNewline
+}
+
+if (!(Test-Path "$scriptsBoostDir/boost")) {
+ "Cloning boost..."
+ Push-Location $scriptsBoostDir
+ try {
+ git clone https://github.com/boostorg/boost --branch boost-$version
+ }
+ finally {
+ Pop-Location
+ }
+}
+else {
+ Push-Location $scriptsBoostDir/boost
+ try {
+ git fetch
+ git checkout -f boost-$version
+ }
+ finally {
+ Pop-Location
+ }
+}
+
+$foundLibraries = Get-ChildItem $scriptsBoostDir/boost/libs -directory | ForEach-Object name | ForEach-Object {
+ if ($_ -eq "numeric") {
+ "numeric_conversion"
+ "interval"
+ "odeint"
+ "ublas"
+ }
+ else {
+ $_.ToString()
+ }
+}
+
+$tools = @("build", "cmake")
+
+$foundLibraries += $tools
+$foundLibraries = $foundLibraries | Sort-Object
+
+$updateServicePorts = $false
+
+if ($libraries.Length -eq 0) {
+ $libraries = $foundLibraries
+ $updateServicePorts = $true
+}
+
+$downloads = "$scriptsBoostDir/../../downloads"
+New-Item -ItemType "Directory" $downloads -erroraction SilentlyContinue | out-null
+
+$boostPortDependencies = @()
+
+foreach ($library in $libraries) {
+ $archive = "$downloads/boostorg-$library-boost-$version.tar.gz"
+ "Handling boost/$library... $archive"
+ if (!(Test-Path $archive)) {
+ "Downloading boost/$library..."
+ Invoke-WebRequest -Uri "https://github.com/boostorg/$library/archive/boost-$version.tar.gz" -OutFile "$archive"
+ "Downloaded boost/$library..."
+ }
+
+ $unpacked = "$scriptsBoostDir/libs/$library-boost-$version"
+ if (!(Test-Path $unpacked)) {
+ "Unpacking boost/$library..."
+ New-Item -ItemType "Directory" $scriptsBoostDir/libs -erroraction SilentlyContinue | out-null
+ Push-Location $scriptsBoostDir/libs
+ try {
+ cmake -E tar xf $archive
+ }
+ finally {
+ Pop-Location
+ }
+ }
+ Push-Location $unpacked
+ try {
+ $usedLibraries = Get-ChildItem -Recurse -Path include, src -File `
+ | Where-Object { $_ -is [System.IO.FileInfo] } `
+ | ForEach-Object {
+ Write-Verbose "${library}: processing file: $_"
+ Get-Content -LiteralPath $_.FullName
+ } `
+ | Where-Object {
+ $_ -match ' *# *include *[<"]boost\/'
+ } `
+ | ForEach-Object {
+ # Extract path from the line
+ Write-Verbose "${library}: processing line: $_"
+ $_ -replace " *# *include *[<`"]boost\/([a-zA-Z0-9\.\-_\/]*)[>`"].*", "`$1"
+ }`
+ | ForEach-Object {
+ # Map the path to the library name
+ Write-Verbose "${library}: processing path: $_"
+ if ($_ -match "^detail\/winapi\/") { "winapi" }
+ elseif ($_ -eq "detail/algorithm.hpp") { "graph" }
+ elseif ($_ -eq "detail/atomic_count.hpp") { "smart_ptr" }
+ elseif ($_ -eq "detail/basic_pointerbuf.hpp") { "lexical_cast" }
+ elseif ($_ -eq "detail/call_traits.hpp") { "utility" }
+ elseif ($_ -eq "detail/compressed_pair.hpp") { "utility" }
+ elseif ($_ -eq "detail/interlocked.hpp") { "winapi" }
+ elseif ($_ -eq "detail/iterator.hpp") { "core" }
+ elseif ($_ -eq "detail/lcast_precision.hpp") { "lexical_cast" }
+ elseif ($_ -eq "detail/lightweight_mutex.hpp") { "smart_ptr" }
+ elseif ($_ -eq "detail/lightweight_test.hpp") { "core" }
+ elseif ($_ -eq "detail/lightweight_thread.hpp") { "smart_ptr" }
+ elseif ($_ -eq "detail/no_exceptions_support.hpp") { "core" }
+ elseif ($_ -eq "detail/scoped_enum_emulation.hpp") { "core" }
+ elseif ($_ -eq "detail/sp_typeinfo.hpp") { "core" }
+ elseif ($_ -eq "detail/ob_compressed_pair.hpp") { "utility" }
+ elseif ($_ -eq "detail/quick_allocator.hpp") { "smart_ptr" }
+ elseif ($_ -eq "detail/workaround.hpp") { "config" }
+ elseif ($_ -match "^functional\/hash\/") { "container_hash" }
+ elseif ($_ -eq "functional/hash.hpp") { "container_hash" }
+ elseif ($_ -eq "functional/hash_fwd.hpp") { "container_hash" }
+ elseif ($_ -match "^graph\/distributed\/") { "graph_parallel" }
+ elseif ($_ -match "^graph\/parallel\/") { "graph_parallel" }
+ elseif ($_ -eq "graph/accounting.hpp") { "graph_parallel" }
+ elseif ($_ -eq "exception/exception.hpp") { "throw_exception" }
+ elseif ($_ -match "^numeric\/conversion\/") { "numeric_conversion" }
+ elseif ($_ -match "^numeric\/interval\/") { "interval" }
+ elseif ($_ -match "^numeric\/odeint\/") { "odeint" }
+ elseif ($_ -match "^numeric\/ublas\/") { "ublas" }
+ elseif ($_ -eq "numeric/interval.hpp") { "interval" }
+ elseif ($_ -eq "numeric/odeint.hpp") { "odeint" }
+ elseif ($_ -match "^parameter\/aux_\/python\/") { "parameter_python" }
+ elseif ($_ -eq "parameter/python.hpp") { "parameter_python" }
+ elseif ($_ -eq "pending/detail/disjoint_sets.hpp") { "graph" }
+ elseif ($_ -eq "pending/detail/int_iterator.hpp") { "iterator" }
+ elseif ($_ -eq "pending/detail/property.hpp") { "graph" }
+ elseif ($_ -eq "pending/bucket_sorter.hpp") { "graph" }
+ elseif ($_ -eq "pending/container_traits.hpp") { "graph" }
+ elseif ($_ -eq "pending/disjoint_sets.hpp") { "graph" }
+ elseif ($_ -eq "pending/fenced_priority_queue.hpp") { "graph" }
+ elseif ($_ -eq "pending/fibonacci_heap.hpp") { "graph" }
+ elseif ($_ -eq "pending/indirect_cmp.hpp") { "graph" }
+ elseif ($_ -eq "pending/integer_log2.hpp") { "integer" }
+ elseif ($_ -eq "pending/is_heap.hpp") { "graph" }
+ elseif ($_ -eq "pending/iterator_adaptors.hpp") { "iterator" }
+ elseif ($_ -eq "pending/iterator_tests.hpp") { "iterator" }
+ elseif ($_ -eq "pending/mutable_heap.hpp") { "graph" }
+ elseif ($_ -eq "pending/mutable_queue.hpp") { "graph" }
+ elseif ($_ -eq "pending/property.hpp") { "graph" }
+ elseif ($_ -eq "pending/property_serialize.hpp") { "graph" }
+ elseif ($_ -eq "pending/queue.hpp") { "graph" }
+ elseif ($_ -eq "pending/relaxed_heap.hpp") { "graph" }
+ elseif ($_ -eq "pending/stringtok.hpp") { "graph" }
+ elseif ($_ -match "^property_map\/parallel\/") { "property_map_parallel" }
+ elseif ($_ -eq "utility/addressof.hpp") { "core" }
+ elseif ($_ -eq "utility/declval.hpp") { "type_traits" }
+ elseif ($_ -eq "utility/enable_if.hpp") { "core" }
+ elseif ($_ -eq "utility/explicit_operator_bool.hpp") { "core" }
+ elseif ($_ -eq "utility/swap.hpp") { "core" }
+ # Extract first directory name or file name from the path
+ else { $_ -replace "([a-zA-Z0-9\.\-_]*).*", "`$1" }
+ } `
+ | ForEach-Object {
+ # Map directory/file name to the library name
+ Write-Verbose "${library}: processing name: $_"
+ if ($_ -eq "current_function.hpp") { "assert" }
+ elseif ($_ -eq "memory_order.hpp") { "atomic" }
+ elseif ($_ -match "is_placeholder.hpp|mem_fn.hpp") { "bind" }
+ elseif ($_ -eq "circular_buffer_fwd.hpp") { "circular_buffer" }
+ elseif ($_ -match "^concept$|concept_archetype.hpp") { "concept_check" }
+ elseif ($_ -match "cstdint.hpp|cxx11_char_types.hpp|limits.hpp|version.hpp") { "config" }
+ elseif ($_ -eq "contract_macro.hpp") { "contract" }
+ elseif ($_ -match "implicit_cast.hpp|polymorphic_cast.hpp|polymorphic_pointer_cast.hpp") { "conversion" }
+ elseif ($_ -eq "make_default.hpp") { "convert" }
+ elseif ($_ -match "checked_delete.hpp|get_pointer.hpp|iterator.hpp|non_type.hpp|noncopyable.hpp|ref.hpp|swap.hpp|type.hpp|visit_each.hpp") { "core" }
+ elseif ($_ -match "blank.hpp|blank_fwd.hpp|cstdlib.hpp") { "detail" }
+ elseif ($_ -eq "dynamic_bitset_fwd.hpp") { "dynamic_bitset" }
+ elseif ($_ -eq "exception_ptr.hpp") { "exception" }
+ elseif ($_ -eq "foreach_fwd.hpp") { "foreach" }
+ elseif ($_ -eq "function_equal.hpp") { "function" }
+ elseif ($_ -match "integer_fwd.hpp|integer_traits.hpp") { "integer" }
+ elseif ($_ -eq "io_fwd.hpp") { "io" }
+ elseif ($_ -match "function_output_iterator.hpp|generator_iterator.hpp|indirect_reference.hpp|iterator_adaptors.hpp|next_prior.hpp|pointee.hpp|shared_container_iterator.hpp") { "iterator" }
+ elseif ($_ -match "cstdfloat.hpp|math_fwd.hpp") { "math" }
+ elseif ($_ -match "multi_index_container.hpp|multi_index_container_fwd.hpp") { "multi_index" }
+ elseif ($_ -eq "cast.hpp") { "numeric_conversion" }
+ elseif ($_ -match "none.hpp|none_t.hpp") { "optional" }
+ elseif ($_ -eq "qvm_lite.hpp") { "qvm" }
+ elseif ($_ -eq "nondet_random.hpp") { "random" }
+ elseif ($_ -match "cregex.hpp|regex_fwd.hpp") { "regex" }
+ elseif ($_ -eq "archive") { "serialization" }
+ elseif ($_ -match "last_value.hpp|signal.hpp") { "signals" }
+ elseif ($_ -match "enable_shared_from_this.hpp|intrusive_ptr.hpp|make_shared.hpp|make_unique.hpp|pointer_cast.hpp|pointer_to_other.hpp|scoped_array.hpp|scoped_ptr.hpp|shared_array.hpp|shared_ptr.hpp|weak_ptr.hpp") { "smart_ptr" }
+ elseif ($_ -eq "cerrno.hpp") { "system" }
+ elseif ($_ -eq "progress.hpp") { "timer" }
+ elseif ($_ -match "token_functions.hpp|token_iterator.hpp") { "tokenizer" }
+ elseif ($_ -match "aligned_storage.hpp") { "type_traits" }
+ elseif ($_ -match "unordered_map.hpp|unordered_set.hpp") { "unordered" }
+ elseif ($_ -match "call_traits.hpp|compressed_pair.hpp|operators.hpp|operators_v1.hpp") { "utility" }
+ # By dafault use the name as is, just remove the file extension if available
+ else { $_ -replace "\.hp?p?", "" }
+ } `
+ | Where-Object {
+ $_ -ne $library
+ } `
+ | Group-Object -NoElement | ForEach-Object Name
+
+ " [known] " + $($usedLibraries | Where-Object { $foundLibraries -contains $_ })
+ "[unknown] " + $($usedLibraries | Where-Object { $foundLibraries -notcontains $_ })
+
+ $deps = @($usedLibraries | Where-Object { $foundLibraries -contains $_ })
+
+ # Remove optional dependencies
+ $deps = @($deps `
+ | Where-Object {
+ # Boost.Filesystem only used for tests or examples
+ # See https://github.com/boostorg/gil#requirements
+ -not ($library -eq 'gil' -and $_ -eq 'filesystem')
+ } `
+ | Where-Object {
+ # Note that Boost.Pfr is not listed because it's a peer dependency
+ # See CMakeLists.txt
+ -not ($library -eq 'mysql' -and $_ -eq 'pfr')
+ } `
+ | Where-Object {
+ # Boost.Beast only used for MQTT connections over WebSocket
+ # See CMakeLists.txt
+ -not ($library -eq 'mqtt5' -and $_ -eq 'beast')
+ }
+ )
+
+ # Remove cyclic dependencies
+ $deps = @($deps `
+ | Where-Object {
+ -not ($library -eq 'graph' -and $_ -eq 'geometry')
+ }
+ )
+
+ $needsBuild = $true
+
+ if ($tools -contains $library) {
+ $needsBuild = $false
+ $deps += @('uninstall')
+ }
+ else {
+ $deps += @('cmake')
+ if ($library -ne 'headers') {
+ $deps += @("headers")
+ if ($library -ne 'config') {
+ # Note: CMake's built-in finder (FindBoost.cmake) looks for Boost header files (boost/version.h or boost/config.h)
+ # and stores the result in the Boost_INCLUDE_DIR variable. The files boost/version.h or boost/config.h are owned by the config library.
+ # Without these files, the Boost_INCLUDE_DIR variable will not be set and the Boost version will not be detected.
+ $deps += @('config')
+ }
+ }
+ $boostPortDependencies += @(GeneratePortDependency $library)
+ }
+
+ $deps = $deps | Select-Object -Unique
+ $deps = @($deps | ForEach-Object { GeneratePortDependency $_ -ForLibrary $library })
+
+ GeneratePort `
+ -Library $library `
+ -Archive $archive `
+ -NeedsBuild $needsBuild `
+ -Dependencies $deps
+ }
+ finally {
+ Pop-Location
+ }
+}
+
+if ($updateServicePorts) {
+ # Generate manifest file for master boost port which depends on each individual library
+ GeneratePortManifest `
+ -PortName "boost" `
+ -Homepage "https://boost.org" `
+ -Description "Peer-reviewed portable C++ source libraries" `
+ -License "BSL-1.0" `
+ -Dependencies $boostPortDependencies
+
+ Set-Content -LiteralPath "$portsDir/boost/portfile.cmake" `
+ -Value "set(VCPKG_POLICY_EMPTY_PACKAGE enabled)`n" `
+ -Encoding UTF8 `
+ -NoNewline
+
+ # Generate manifest files for boost-uninstall
+ GeneratePortManifest `
+ -PortName "boost-uninstall" `
+ -Description "Internal vcpkg port used to uninstall Boost" `
+ -License "MIT"
+}
diff --git a/vcpkg/scripts/boost/post-build-stubs/config.cmake b/vcpkg/scripts/boost/post-build-stubs/config.cmake new file mode 100644 index 0000000..48300ff --- /dev/null +++ b/vcpkg/scripts/boost/post-build-stubs/config.cmake @@ -0,0 +1,7 @@ +file(APPEND "${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp" "\n#ifndef BOOST_ALL_NO_LIB\n#define BOOST_ALL_NO_LIB\n#endif\n") +file(APPEND "${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp" "\n#undef BOOST_ALL_DYN_LINK\n") + +if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + file(APPEND "${CURRENT_PACKAGES_DIR}/include/boost/config/user.hpp" "\n#define BOOST_ALL_DYN_LINK\n") +endif() +file(COPY "${SOURCE_PATH}/libs/config/checks" DESTINATION "${CURRENT_PACKAGES_DIR}/share/boost-config") diff --git a/vcpkg/scripts/boost/post-build-stubs/predef.cmake b/vcpkg/scripts/boost/post-build-stubs/predef.cmake new file mode 100644 index 0000000..3b4b98a --- /dev/null +++ b/vcpkg/scripts/boost/post-build-stubs/predef.cmake @@ -0,0 +1,2 @@ + +file(COPY "${SOURCE_PATH}/libs/predef/tools/check" DESTINATION "${CURRENT_PACKAGES_DIR}/share/boost-predef") diff --git a/vcpkg/scripts/boost/post-build-stubs/test.cmake b/vcpkg/scripts/boost/post-build-stubs/test.cmake new file mode 100644 index 0000000..2891a9d --- /dev/null +++ b/vcpkg/scripts/boost/post-build-stubs/test.cmake @@ -0,0 +1,13 @@ +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib/manual-link") + file(GLOB MONITOR_LIBS ${CURRENT_PACKAGES_DIR}/lib/*_exec_monitor*) + file(COPY ${MONITOR_LIBS} DESTINATION "${CURRENT_PACKAGES_DIR}/lib/manual-link") + file(REMOVE ${MONITOR_LIBS}) +endif() + +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link") + file(GLOB DEBUG_MONITOR_LIBS ${CURRENT_PACKAGES_DIR}/debug/lib/*_exec_monitor*) + file(COPY ${DEBUG_MONITOR_LIBS} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib/manual-link") + file(REMOVE ${DEBUG_MONITOR_LIBS}) +endif() diff --git a/vcpkg/scripts/boost/post-source-stubs/build.cmake b/vcpkg/scripts/boost/post-source-stubs/build.cmake new file mode 100644 index 0000000..796584e --- /dev/null +++ b/vcpkg/scripts/boost/post-source-stubs/build.cmake @@ -0,0 +1,43 @@ +# This fixes the lib path to use desktop libs instead of uwp -- TODO: improve this with better "host" compilation
+string(REPLACE "\\store\\;" "\\;" LIB "$ENV{LIB}")
+set(ENV{LIB} "${LIB}")
+
+file(COPY
+ ${SOURCE_PATH}/
+ DESTINATION ${CURRENT_PACKAGES_DIR}/tools/boost-build
+)
+
+file(READ "${CURRENT_PACKAGES_DIR}/tools/boost-build/src/tools/msvc.jam" _contents)
+string(REPLACE " /ZW /EHsc " "" _contents "${_contents}")
+string(REPLACE "-nologo" "" _contents "${_contents}")
+string(REPLACE "/nologo" "" _contents "${_contents}")
+string(REPLACE "/Zm800" "" _contents "${_contents}")
+string(REPLACE "<define>_WIN32_WINNT=0x0602" "" _contents "${_contents}")
+file(WRITE "${CURRENT_PACKAGES_DIR}/tools/boost-build/src/tools/msvc.jam" "${_contents}")
+
+message(STATUS "Bootstrapping...")
+if(CMAKE_HOST_WIN32)
+ if(VCPKG_TARGET_IS_MINGW)
+ set(TOOLSET mingw)
+ else()
+ set(TOOLSET msvc)
+ endif()
+ vcpkg_execute_required_process(
+ COMMAND "${CURRENT_PACKAGES_DIR}/tools/boost-build/bootstrap.bat" ${TOOLSET}
+ WORKING_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/boost-build
+ LOGNAME bootstrap-${TARGET_TRIPLET}
+ )
+else()
+ vcpkg_execute_required_process(
+ COMMAND "${CURRENT_PACKAGES_DIR}/tools/boost-build/bootstrap.sh"
+ WORKING_DIRECTORY ${CURRENT_PACKAGES_DIR}/tools/boost-build
+ LOGNAME bootstrap-${TARGET_TRIPLET}
+ )
+endif()
+
+vcpkg_download_distfile(BOOST_LICENSE
+ URLS "https://raw.githubusercontent.com/boostorg/boost/refs/tags/boost-${VERSION}/LICENSE_1_0.txt"
+ FILENAME "boost-${VERSION}-LICENSE_1_0.txt"
+ SHA512 d6078467835dba8932314c1c1e945569a64b065474d7aced27c9a7acc391d52e9f234138ed9f1aa9cd576f25f12f557e0b733c14891d42c16ecdc4a7bd4d60b8
+)
+vcpkg_install_copyright(FILE_LIST "${BOOST_LICENSE}")
diff --git a/vcpkg/scripts/boost/post-source-stubs/cmake.cmake b/vcpkg/scripts/boost/post-source-stubs/cmake.cmake new file mode 100644 index 0000000..0480e70 --- /dev/null +++ b/vcpkg/scripts/boost/post-source-stubs/cmake.cmake @@ -0,0 +1,19 @@ +# Beta builds contains a text in the version string
+string(REGEX MATCH "([0-9]+)\\.([0-9]+)\\.([0-9]+)" SEMVER_VERSION "${VERSION}")
+configure_file("${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt.in" "${SOURCE_PATH}/CMakeLists.txt" @ONLY)
+
+vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}")
+vcpkg_cmake_install()
+
+file(INSTALL "${SOURCE_PATH}/include/" DESTINATION "${CURRENT_PACKAGES_DIR}/share/boost/cmake-build")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/vcpkg-port-config.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+
+vcpkg_download_distfile(BOOST_LICENSE
+ URLS "https://raw.githubusercontent.com/boostorg/boost/refs/tags/boost-${VERSION}/LICENSE_1_0.txt"
+ FILENAME "boost-${VERSION}-LICENSE_1_0.txt"
+ SHA512 d6078467835dba8932314c1c1e945569a64b065474d7aced27c9a7acc391d52e9f234138ed9f1aa9cd576f25f12f557e0b733c14891d42c16ecdc4a7bd4d60b8
+)
+vcpkg_install_copyright(FILE_LIST "${BOOST_LICENSE}")
+
+file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug")
diff --git a/vcpkg/scripts/boost/pre-build-stubs/charconv.cmake b/vcpkg/scripts/boost/pre-build-stubs/charconv.cmake new file mode 100644 index 0000000..58d074a --- /dev/null +++ b/vcpkg/scripts/boost/pre-build-stubs/charconv.cmake @@ -0,0 +1,4 @@ +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND VCPKG_TARGET_IS_MINGW) + # when cross compile, cmake generates the error try_run() invoked in cross-compiling mode + list(APPEND FEATURE_OPTIONS "-DBOOST_CHARCONV_QUADMATH_FOUND_EXITCODE=0") +endif()
\ No newline at end of file diff --git a/vcpkg/scripts/boost/pre-build-stubs/iostreams.cmake b/vcpkg/scripts/boost/pre-build-stubs/iostreams.cmake new file mode 100644 index 0000000..93f8759 --- /dev/null +++ b/vcpkg/scripts/boost/pre-build-stubs/iostreams.cmake @@ -0,0 +1,3 @@ +if (BOOST_IOSTREAMS_ENABLE_ZSTD AND VCPKG_LIBRARY_LINKAGE STREQUAL "static") + list(APPEND FEATURE_OPTIONS "-DBOOST_IOSTREAMS_ZSTD_TARGET=zstd::libzstd_static") +endif()
\ No newline at end of file diff --git a/vcpkg/scripts/boost/pre-build-stubs/locale.cmake b/vcpkg/scripts/boost/pre-build-stubs/locale.cmake new file mode 100644 index 0000000..2ebcfc9 --- /dev/null +++ b/vcpkg/scripts/boost/pre-build-stubs/locale.cmake @@ -0,0 +1,4 @@ +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND VCPKG_TARGET_IS_MINGW) + # mingw cross compile toolchain lacks std conv support + list(APPEND FEATURE_OPTIONS "-DBOOST_LOCALE_ENABLE_STD=OFF") +endif()
\ No newline at end of file diff --git a/vcpkg/scripts/boost/pre-source-stubs/build.cmake b/vcpkg/scripts/boost/pre-source-stubs/build.cmake new file mode 100644 index 0000000..5f374c6 --- /dev/null +++ b/vcpkg/scripts/boost/pre-source-stubs/build.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+if(CMAKE_HOST_WIN32 AND VCPKG_CMAKE_SYSTEM_NAME AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" AND NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW")
+ return()
+endif()
diff --git a/vcpkg/scripts/boost/pre-source-stubs/cmake.cmake b/vcpkg/scripts/boost/pre-source-stubs/cmake.cmake new file mode 100644 index 0000000..b6eaf59 --- /dev/null +++ b/vcpkg/scripts/boost/pre-source-stubs/cmake.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_CMAKE_HELPER_PORT enabled)
diff --git a/vcpkg/scripts/boost/pre-source-stubs/system.cmake b/vcpkg/scripts/boost/pre-source-stubs/system.cmake new file mode 100644 index 0000000..1387891 --- /dev/null +++ b/vcpkg/scripts/boost/pre-source-stubs/system.cmake @@ -0,0 +1 @@ +vcpkg_buildpath_length_warning(37)
diff --git a/vcpkg/scripts/bootstrap.ps1 b/vcpkg/scripts/bootstrap.ps1 new file mode 100644 index 0000000..e1338c7 --- /dev/null +++ b/vcpkg/scripts/bootstrap.ps1 @@ -0,0 +1,87 @@ +[CmdletBinding()] +param( + $badParam, + [Parameter(Mandatory=$False)][switch]$win64 = $false, + [Parameter(Mandatory=$False)][string]$withVSPath = "", + [Parameter(Mandatory=$False)][string]$withWinSDK = "", + [Parameter(Mandatory=$False)][switch]$disableMetrics = $false +) +Set-StrictMode -Version Latest +# Powershell2-compatible way of forcing named-parameters +if ($badParam) +{ + if ($disableMetrics -and $badParam -eq "1") + { + Write-Warning "'disableMetrics 1' is deprecated, please change to 'disableMetrics' (without '1')." + } + else + { + throw "Only named parameters are allowed." + } +} + +if ($win64) +{ + Write-Warning "-win64 no longer has any effect; ignored." +} + +if (-Not [string]::IsNullOrWhiteSpace($withVSPath)) +{ + Write-Warning "-withVSPath no longer has any effect; ignored." +} + +if (-Not [string]::IsNullOrWhiteSpace($withWinSDK)) +{ + Write-Warning "-withWinSDK no longer has any effect; ignored." +} + +$scriptsDir = split-path -parent $script:MyInvocation.MyCommand.Definition +$vcpkgRootDir = $scriptsDir +while (!($vcpkgRootDir -eq "") -and !(Test-Path "$vcpkgRootDir\.vcpkg-root")) +{ + Write-Verbose "Examining $vcpkgRootDir for .vcpkg-root" + $vcpkgRootDir = Split-path $vcpkgRootDir -Parent +} + +Write-Verbose "Examining $vcpkgRootDir for .vcpkg-root - Found" + +# Read the vcpkg-tool config file to determine what release to download +$Config = ConvertFrom-StringData (Get-Content "$PSScriptRoot\vcpkg-tool-metadata.txt" -Raw) +$versionDate = $Config.VCPKG_TOOL_RELEASE_TAG + +if ($env:PROCESSOR_ARCHITECTURE -eq 'ARM64' -or $env:PROCESSOR_IDENTIFIER -match "ARMv[8,9] \(64-bit\)") { + & "$scriptsDir/tls12-download-arm64.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg-arm64.exe" "$vcpkgRootDir\vcpkg.exe" +} else { + & "$scriptsDir/tls12-download.exe" github.com "/microsoft/vcpkg-tool/releases/download/$versionDate/vcpkg.exe" "$vcpkgRootDir\vcpkg.exe" +} + +Write-Host "" + +if ($LASTEXITCODE -ne 0) +{ + Write-Error "Downloading vcpkg.exe failed. Please check your internet connection, or consider downloading a recent vcpkg.exe from https://github.com/microsoft/vcpkg-tool with a browser." + throw +} + +& "$vcpkgRootDir\vcpkg.exe" version --disable-metrics + +if ($disableMetrics) +{ + Set-Content -Value "" -Path "$vcpkgRootDir\vcpkg.disable-metrics" -Force +} +elseif (-Not (Test-Path "$vcpkgRootDir\vcpkg.disable-metrics")) +{ + # Note that we intentionally leave any existing vcpkg.disable-metrics; once a user has + # opted out they should stay opted out. + Write-Host @" +Telemetry +--------- +vcpkg collects usage data in order to help us improve your experience. +The data collected by Microsoft is anonymous. +You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics, +passing --disable-metrics to vcpkg on the command line, +or by setting the VCPKG_DISABLE_METRICS environment variable. + +Read more about vcpkg telemetry at docs/about/privacy.md +"@ +} diff --git a/vcpkg/scripts/bootstrap.sh b/vcpkg/scripts/bootstrap.sh new file mode 100644 index 0000000..654150b --- /dev/null +++ b/vcpkg/scripts/bootstrap.sh @@ -0,0 +1,265 @@ +#!/bin/sh + +# Find .vcpkg-root. +vcpkgRootDir=$(X= cd -- "$(dirname -- "$0")" && pwd -P) +while [ "$vcpkgRootDir" != "/" ] && ! [ -e "$vcpkgRootDir/.vcpkg-root" ]; do + vcpkgRootDir="$(dirname "$vcpkgRootDir")" +done + +# Parse arguments. +vcpkgDisableMetrics="OFF" +vcpkgUseSystem=false +vcpkgUseMuslC="OFF" +vcpkgSkipDependencyChecks="OFF" +for var in "$@" +do + if [ "$var" = "-disableMetrics" -o "$var" = "--disableMetrics" ]; then + vcpkgDisableMetrics="ON" + elif [ "$var" = "-useSystemBinaries" -o "$var" = "--useSystemBinaries" ]; then + echo "Warning: -useSystemBinaries no longer has any effect; ignored. Note that the VCPKG_USE_SYSTEM_BINARIES environment variable behavior is not changed." + elif [ "$var" = "-allowAppleClang" -o "$var" = "--allowAppleClang" ]; then + echo "Warning: -allowAppleClang no longer has any effect; ignored." + elif [ "$var" = "-buildTests" ]; then + echo "Warning: -buildTests no longer has any effect; ignored." + elif [ "$var" = "-skipDependencyChecks" ]; then + vcpkgSkipDependencyChecks="ON" + elif [ "$var" = "-musl" ]; then + vcpkgUseMuslC="ON" + elif [ "$var" = "-help" -o "$var" = "--help" ]; then + echo "Usage: ./bootstrap-vcpkg.sh [options]" + echo + echo "Options:" + echo " -help Display usage help" + echo " -disableMetrics Mark this vcpkg root to disable metrics." + echo " -skipDependencyChecks Skip checks for vcpkg prerequisites. vcpkg may not run." + echo " -musl Use the musl binary rather than the glibc binary on Linux." + exit 1 + else + echo "Unknown argument $var. Use '-help' for help." + exit 1 + fi +done + +# Enable using this entry point on Windows from an msys2 or cygwin bash env. (e.g., git bash) by redirecting to the .bat file. +unixKernelName=$(uname -s | sed -E 's/(CYGWIN|MINGW|MSYS).*_NT.*/\1_NT/') +if [ "$unixKernelName" = CYGWIN_NT ] || [ "$unixKernelName" = MINGW_NT ] || [ "$unixKernelName" = MSYS_NT ]; then + if [ "$vcpkgDisableMetrics" = "ON" ]; then + args="-disableMetrics" + else + args="" + fi + + vcpkgRootDir=$(cygpath -aw "$vcpkgRootDir") + cmd "/C $vcpkgRootDir\\bootstrap-vcpkg.bat $args" || exit 1 + exit 0 +fi + +# Determine the downloads directory. +if [ -z ${VCPKG_DOWNLOADS+x} ]; then + downloadsDir="$vcpkgRootDir/downloads" +else + downloadsDir="$VCPKG_DOWNLOADS" + if [ ! -d "$VCPKG_DOWNLOADS" ]; then + echo "VCPKG_DOWNLOADS was set to '$VCPKG_DOWNLOADS', but that was not a directory." + exit 1 + fi + +fi + +# Check for minimal prerequisites. +vcpkgCheckRepoTool() +{ + __tool=$1 + # Only perform dependency checks when they are not explicitly skipped. + if [ "$vcpkgSkipDependencyChecks" = "OFF" ]; then + if ! command -v "$__tool" >/dev/null 2>&1 ; then + echo "Could not find $__tool. Please install it (and other dependencies) with:" + echo "On Debian and Ubuntu derivatives:" + echo " sudo apt-get install curl zip unzip tar" + echo "On recent Red Hat and Fedora derivatives:" + echo " sudo dnf install curl zip unzip tar" + echo "On older Red Hat and Fedora derivatives:" + echo " sudo yum install curl zip unzip tar" + echo "On SUSE Linux and derivatives:" + echo " sudo zypper install curl zip unzip tar" + echo "On Arch Linux and derivatives:" + echo " sudo pacman -Syu base-devel git curl zip unzip tar cmake ninja" + echo "On Alpine:" + echo " apk add build-base cmake ninja zip unzip curl git" + echo " (and export VCPKG_FORCE_SYSTEM_BINARIES=1)" + echo "On Solaris and illumos distributions:" + echo " pkg install web/curl compress/zip compress/unzip" + exit 1 + fi + fi +} + +vcpkgCheckRepoTool curl +vcpkgCheckRepoTool zip +vcpkgCheckRepoTool unzip +vcpkgCheckRepoTool tar + +UNAME="$(uname)" +ARCH="$(uname -m)" + +if [ -e /etc/alpine-release ]; then + vcpkgUseSystem="ON" + vcpkgUseMuslC="ON" +fi + +if [ "$UNAME" = "OpenBSD" ]; then + vcpkgUseSystem="ON" +fi + +if [ "$vcpkgUseSystem" = "ON" ]; then + vcpkgCheckRepoTool cmake + vcpkgCheckRepoTool ninja + vcpkgCheckRepoTool git +fi + +vcpkgCheckEqualFileHash() +{ + url=$1; filePath=$2; expectedHash=$3 + + if command -v "sha512sum" >/dev/null 2>&1 ; then + actualHash=$(sha512sum "$filePath") + elif command -v "sha512" >/dev/null 2>&1 ; then + # OpenBSD + actualHash=$(sha512 -q "$filePath") + else + # [g]sha512sum is not available by default on osx + # shasum is not available by default on Fedora + actualHash=$(shasum -a 512 "$filePath") + fi + + actualHash="${actualHash%% *}" # shasum returns [hash filename], so get the first word + + if ! [ "$expectedHash" = "$actualHash" ]; then + echo "" + echo "File does not have expected hash:" + echo " url: [ $url ]" + echo " File path: [ $downloadPath ]" + echo " Expected hash: [ $sha512 ]" + echo " Actual hash: [ $actualHash ]" + exit 1 + fi +} + +vcpkgDownloadFile() +{ + url=$1; downloadPath=$2 sha512=$3 + rm -rf "$downloadPath.part" + curl -L $url --tlsv1.2 --create-dirs --retry 3 --output "$downloadPath.part" --silent --show-error --fail || exit 1 + + vcpkgCheckEqualFileHash $url "$downloadPath.part" $sha512 + chmod +x "$downloadPath.part" + mv "$downloadPath.part" "$downloadPath" +} + +vcpkgExtractArchive() +{ + archive=$1; toPath=$2 + rm -rf "$toPath" "$toPath.partial" + case "$archive" in + *.tar.gz) + mkdir -p "$toPath.partial" + $(cd "$toPath.partial" && tar xzf "$archive") + ;; + *.zip) + unzip -qd "$toPath.partial" "$archive" + ;; + esac + mv "$toPath.partial" "$toPath" +} + +# Determine what we are going to do to bootstrap: +# MacOS -> Download vcpkg-macos +# Linux +# useMuslC -> download vcpkg-muslc +# amd64 -> download vcpkg-glibc +# arm64 -> download vcpkg-glibc-arm64 +# Otherwise +# Download and build from source + +# Read the vcpkg-tool config file to determine what release to download +. "$vcpkgRootDir/scripts/vcpkg-tool-metadata.txt" + +vcpkgDownloadTool="ON" +if [ "$UNAME" = "Darwin" ]; then + echo "Downloading vcpkg-macos..." + vcpkgToolReleaseSha=$VCPKG_MACOS_SHA + vcpkgToolName="vcpkg-macos" +elif [ "$UNAME" = "Linux" ] && [ "$vcpkgUseMuslC" = "ON" ] && [ "$ARCH" = "x86_64" ]; then + echo "Downloading vcpkg-muslc..." + vcpkgToolReleaseSha=$VCPKG_MUSLC_SHA + vcpkgToolName="vcpkg-muslc" +elif [ "$UNAME" = "Linux" ] && [ "$ARCH" = "x86_64" ]; then + echo "Downloading vcpkg-glibc..." + vcpkgToolReleaseSha=$VCPKG_GLIBC_SHA + vcpkgToolName="vcpkg-glibc" +elif [ "$UNAME" = "Linux" ] && [ "$vcpkgUseMuslC" = "OFF" ] && { [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; }; then + echo "Downloading vcpkg-arm64-glibc..." + vcpkgToolReleaseSha=$VCPKG_GLIBC_ARM64_SHA + vcpkgToolName="vcpkg-glibc-arm64" +else + echo "Unable to determine a binary release of vcpkg; attempting to build from source." + vcpkgDownloadTool="OFF" + vcpkgToolReleaseSha=$VCPKG_TOOL_SOURCE_SHA +fi + +# Do the download or build. +if [ "$vcpkgDownloadTool" = "ON" ]; then + vcpkgDownloadFile "https://github.com/microsoft/vcpkg-tool/releases/download/$VCPKG_TOOL_RELEASE_TAG/$vcpkgToolName" "$vcpkgRootDir/vcpkg" $vcpkgToolReleaseSha +else + vcpkgToolReleaseArchive="$VCPKG_TOOL_RELEASE_TAG.zip" + vcpkgToolUrl="https://github.com/microsoft/vcpkg-tool/archive/$vcpkgToolReleaseArchive" + baseBuildDir="$vcpkgRootDir/buildtrees/_vcpkg" + buildDir="$baseBuildDir/build" + archivePath="$downloadsDir/$vcpkgToolReleaseArchive" + srcBaseDir="$baseBuildDir/src" + srcDir="$srcBaseDir/vcpkg-tool-$VCPKG_TOOL_RELEASE_TAG" + + if [ -e "$archivePath" ]; then + vcpkgCheckEqualFileHash "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha" + else + echo "Downloading vcpkg tool sources" + vcpkgDownloadFile "$vcpkgToolUrl" "$archivePath" "$vcpkgToolReleaseSha" + fi + + echo "Building vcpkg-tool..." + rm -rf "$baseBuildDir" + mkdir -p "$buildDir" + vcpkgExtractArchive "$archivePath" "$srcBaseDir" + cmakeConfigOptions="-DCMAKE_BUILD_TYPE=Release -G 'Ninja' -DVCPKG_DEVELOPMENT_WARNINGS=OFF" + + if [ "${VCPKG_MAX_CONCURRENCY}" != "" ] ; then + cmakeConfigOptions=" $cmakeConfigOptions '-DCMAKE_JOB_POOL_COMPILE:STRING=compile' '-DCMAKE_JOB_POOL_LINK:STRING=link' '-DCMAKE_JOB_POOLS:STRING=compile=$VCPKG_MAX_CONCURRENCY;link=$VCPKG_MAX_CONCURRENCY' " + fi + + (cd "$buildDir" && eval cmake "$srcDir" $cmakeConfigOptions) || exit 1 + (cd "$buildDir" && cmake --build .) || exit 1 + + rm -rf "$vcpkgRootDir/vcpkg" + cp "$buildDir/vcpkg" "$vcpkgRootDir/" +fi + +"$vcpkgRootDir/vcpkg" version --disable-metrics + +# Apply the disable-metrics marker file. +if [ "$vcpkgDisableMetrics" = "ON" ]; then + touch "$vcpkgRootDir/vcpkg.disable-metrics" +elif ! [ -f "$vcpkgRootDir/vcpkg.disable-metrics" ]; then + # Note that we intentionally leave any existing vcpkg.disable-metrics; once a user has + # opted out they should stay opted out. + cat <<EOF +Telemetry +--------- +vcpkg collects usage data in order to help us improve your experience. +The data collected by Microsoft is anonymous. +You can opt-out of telemetry by re-running the bootstrap-vcpkg script with -disableMetrics, +passing --disable-metrics to vcpkg on the command line, +or by setting the VCPKG_DISABLE_METRICS environment variable. + +Read more about vcpkg telemetry at docs/about/privacy.md +EOF +fi diff --git a/vcpkg/scripts/build_info.cmake b/vcpkg/scripts/build_info.cmake new file mode 100644 index 0000000..e86570a --- /dev/null +++ b/vcpkg/scripts/build_info.cmake @@ -0,0 +1,92 @@ +set(Z_BUILD_INFO_FILE_CONTENTS "CRTLinkage: ${VCPKG_CRT_LINKAGE}\n")
+string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "LibraryLinkage: ${VCPKG_LIBRARY_LINKAGE}\n")
+if (DEFINED VCPKG_POLICY_DLLS_WITHOUT_LIBS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyDLLsWithoutLIBs: ${VCPKG_POLICY_DLLS_WITHOUT_LIBS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_DLLS_WITHOUT_EXPORTS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyDLLsWithoutExports: ${VCPKG_POLICY_DLLS_WITHOUT_EXPORTS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyDLLsInStaticLibrary: ${VCPKG_POLICY_DLLS_IN_STATIC_LIBRARY}\n")
+endif()
+if (DEFINED VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyMismatchedNumberOfBinaries: ${VCPKG_POLICY_MISMATCHED_NUMBER_OF_BINARIES}\n")
+endif()
+if (DEFINED VCPKG_POLICY_EMPTY_PACKAGE)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyEmptyPackage: ${VCPKG_POLICY_EMPTY_PACKAGE}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ONLY_RELEASE_CRT)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyOnlyReleaseCRT: ${VCPKG_POLICY_ONLY_RELEASE_CRT}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_OBSOLETE_MSVCRT)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowObsoleteMsvcrt: ${VCPKG_POLICY_ALLOW_OBSOLETE_MSVCRT}\n")
+endif()
+if (DEFINED VCPKG_POLICY_EMPTY_INCLUDE_FOLDER)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyEmptyIncludeFolder: ${VCPKG_POLICY_EMPTY_INCLUDE_FOLDER}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowRestrictedHeaders: ${VCPKG_POLICY_ALLOW_RESTRICTED_HEADERS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_DUMPBIN_CHECKS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipDumpbinChecks: ${VCPKG_POLICY_SKIP_DUMPBIN_CHECKS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipArchitectureCheck: ${VCPKG_POLICY_SKIP_ARCHITECTURE_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_CMAKE_HELPER_PORT)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyCmakeHelperPort: ${VCPKG_POLICY_CMAKE_HELPER_PORT}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_ABSOLUTE_PATHS_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipAbsolutePathsCheck: ${VCPKG_POLICY_SKIP_ABSOLUTE_PATHS_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_ALL_POST_BUILD_CHECKS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipAllPostBuildChecks: ${VCPKG_POLICY_SKIP_ALL_POST_BUILD_CHECKS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_APPCONTAINER_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipAppcontainerCheck: ${VCPKG_POLICY_SKIP_APPCONTAINER_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_CRT_LINKAGE_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipCrtLinkageCheck: ${VCPKG_POLICY_SKIP_CRT_LINKAGE_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_MISPLACED_CMAKE_FILES_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipMisplacedCMakeFilesCheck: ${VCPKG_POLICY_SKIP_MISPLACED_CMAKE_FILES_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_LIB_CMAKE_MERGE_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipLibCMakeMergeCheck: ${VCPKG_POLICY_SKIP_LIB_CMAKE_MERGE_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_DLLS_IN_LIB)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowDllsInLib: ${VCPKG_POLICY_ALLOW_DLLS_IN_LIB}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_MISPLACED_REGULAR_FILES_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipMisplacedRegularFilesCheck: ${VCPKG_POLICY_SKIP_MISPLACED_REGULAR_FILES_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_COPYRIGHT_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipCopyrightCheck: ${VCPKG_POLICY_SKIP_COPYRIGHT_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_KERNEL32_FROM_XBOX)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowKernel32FromXBox: ${VCPKG_POLICY_ALLOW_KERNEL32_FROM_XBOX}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_EXES_IN_BIN)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowExesInBin: ${VCPKG_POLICY_ALLOW_EXES_IN_BIN}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_USAGE_INSTALL_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipUsageInstallCheck: ${VCPKG_POLICY_SKIP_USAGE_INSTALL_CHECK}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_EMPTY_FOLDERS)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowEmptyFolders: ${VCPKG_POLICY_ALLOW_EMPTY_FOLDERS}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_DEBUG_INCLUDE)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowDebugInclude: ${VCPKG_POLICY_ALLOW_DEBUG_INCLUDE}\n")
+endif()
+if (DEFINED VCPKG_POLICY_ALLOW_DEBUG_SHARE)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicyAllowDebugShare: ${VCPKG_POLICY_ALLOW_DEBUG_SHARE}\n")
+endif()
+if (DEFINED VCPKG_POLICY_SKIP_PKGCONFIG_CHECK)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "PolicySkipPkgConfigCheck: ${VCPKG_POLICY_SKIP_PKGCONFIG_CHECK}\n")
+endif()
+
+if (DEFINED VCPKG_HEAD_VERSION)
+ string(APPEND "Z_BUILD_INFO_FILE_CONTENTS" "Version: ${VCPKG_HEAD_VERSION}\n")
+endif()
+
+file(WRITE "${CURRENT_PACKAGES_DIR}/BUILD_INFO" "${Z_BUILD_INFO_FILE_CONTENTS}")
diff --git a/vcpkg/scripts/buildsystems/make_wrapper/cl_cpp_wrapper b/vcpkg/scripts/buildsystems/make_wrapper/cl_cpp_wrapper new file mode 100644 index 0000000..a9ec77f --- /dev/null +++ b/vcpkg/scripts/buildsystems/make_wrapper/cl_cpp_wrapper @@ -0,0 +1,99 @@ +#!/usr/bin/bash + +# cl_cpp_wrapper +# Wrapper around MS's cl.exe to make it act more like Unix cpp, +# in particular process stdin + +PATH="$PATH:/usr/bin" + +msys2_dll="$(test -f /usr/bin/msys-2.0.dll && echo yes)" + +case $msys2_dll,$MACHTYPE in + *-msys | yes,*-cygwin) + slash="-" + ;; + *) + slash="/" + ;; +esac + +# prog specifies the program that should be run cl.exe +prog=cl.exe +debug= +cppopt=("${slash}nologo") +cppopt+=("${slash}E") +verbose= +shared_index=-1 + +processargs() +{ +### Run through every option and convert it to the proper MS one +while test $# -gt 0; do + case "$1" in + -D*) optarg= ;; + -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;; + *) optarg= ;; + esac + gotparam=1 + case "$1" in + --help) + usage + exit 0 + ;; + --verbose) + verbose=1 + ;; + -*) + # Remaining '-' options are passed to the compiler + if test x$optarg != x ; then + cppopt+=("${slash}${1:1}=$optarg") + else + cppopt+=("${slash}${1:1}") + fi + ;; + + /*) + # All '/' options are assumed to be for cpp and are passed through + cppopt+=("${slash}${1:1}") + ;; + + *) + file=$1 + #cppopt+=("$1") + ;; + esac + shift +done +} + +# Whitespace in paths is dealt with by setting IFS and using bash arrays + +# processargs $CPP_FLAGS +IFS="" +processargs $@ + +if test x$V = x1 ; then + verbose=1 +fi + +if test -n "$verbose" ; then + echo -n "$prog" + for opt in "${cppopt[@]}" ; do + echo -n " \"$opt\"" + done + echo "" +fi + +[ $# -ge 1 -a -f "$1" ] && input="$file" || input="-" + +input_file="${file:-/proc/self/fd/0}" +if [ "$input_file" == "/proc/self/fd/0" ]; then + # CL does not support reading from STDIN so it is wrapped here. + tmpout=cpp_wrapper_$RANDOM.h + /usr/bin/cp $input_file $tmpout + exec $prog ${cppopt[@]} $tmpout + rm -f $tmpout +else + exec $prog ${cppopt[@]} $input_file +fi + diff --git a/vcpkg/scripts/buildsystems/make_wrapper/windres-rc b/vcpkg/scripts/buildsystems/make_wrapper/windres-rc new file mode 100755 index 0000000..9d20158 --- /dev/null +++ b/vcpkg/scripts/buildsystems/make_wrapper/windres-rc @@ -0,0 +1,133 @@ +#! /bin/sh +# Wrapper for windres to rc which do not understand '-i -o --output-format'. +# cvtres is invoked by the linker +scriptversion=2022-08-24.12; # UTC + + +nl=' +' + +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent tools from complaining about whitespace usage. +IFS=" "" $nl" + +file_conv= + +# func_file_conv build_file lazy +# Convert a $build file to $host form and store it in $file +# Currently only supports Windows hosts. If the determined conversion +# type is listed in (the comma separated) LAZY, no conversion will +# take place. +func_file_conv () +{ + file=$1 + case $file in + / | /[!/]*) # absolute file, and not a UNC file + if test -z "$file_conv"; then + # lazily determine how to convert abs files + case `uname -s` in + MINGW*) + file_conv=mingw + ;; + CYGWIN* | MSYS*) + file_conv=cygwin + ;; + *) + file_conv=wine + ;; + esac + fi + case $file_conv/,$2, in + *,$file_conv,*) + ;; + mingw/*) + file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` + ;; + cygwin/* | msys/*) + file=`cygpath -m "$file" || echo "$file"` + ;; + wine/*) + file=`winepath -w "$file" || echo "$file"` + ;; + esac + ;; + esac +} + +# func_windres_wrapper rc args... +# Adjust compile command to suit rc instead of windres +func_windres_wrapper () +{ + # Assume a capable shell + bin= + in= + out= + + for arg + do + if test -z "$bin"; then + bin=$1 + elif test -n "$eat"; then + eat= + else + case $1 in + --output-format=*) + ;; + --define*) + eat=1 + set -- "$@" "-d $2" + ;; + --include-dir*) + eat=1 + func_file_conv "$2" + set -- "$@" "-I $file" + ;; + -o) + eat=1 + func_file_conv "$2" + out="$file" + echo "OUTPUT:$file" + ;; + *.obj) + func_file_conv "$1" + out="$file" + echo "OUTPUT:$file" + ;; + -i) + eat=1 + func_file_conv "$2" mingw + in="$file" + echo "INPUT:$file" + ;; + -*) + set -- "$@" "${1//\\\"/\"}" + ;; + *) + # libtool reorders arguments; save unqualified one as input + func_file_conv "$1" + in="$file" + echo "INPUT:$file" + ;; + esac + fi + shift + done + echo "$bin" "$@" -fo "$out" "$in" + exec "$bin" "$@" -fo "$out" "$in" + exit 1 +} + +eat= + +func_windres_wrapper "$@" + + +# Local Variables: +# mode: shell-script +# sh-indentation: 2 +# eval: (add-hook 'before-save-hook 'time-stamp) +# time-stamp-start: "scriptversion=" +# time-stamp-format: "%:y-%02m-%02d.%02H" +# time-stamp-time-zone: "UTC0" +# time-stamp-end: "; # UTC" +# End: diff --git a/vcpkg/scripts/buildsystems/meson/meson.template.in b/vcpkg/scripts/buildsystems/meson/meson.template.in new file mode 100644 index 0000000..995d39b --- /dev/null +++ b/vcpkg/scripts/buildsystems/meson/meson.template.in @@ -0,0 +1,42 @@ +[binaries]
+cmake = ['@CMAKE_COMMAND@']
+python = ['@PYTHON3@']
+ninja = ['@NINJA@']
+pkgconfig= ['@PKGCONFIG@']
+@MESON_MT@
+@MESON_AR@
+@MESON_RC@
+@MESON_C@
+@MESON_C_LD@
+@MESON_CXX@
+@MESON_CXX_LD@
+@MESON_OBJC@
+@MESON_OBJC_LD@
+@MESON_OBJCPP@
+@MESON_OBJCPP_LD@
+@MESON_FC@
+@MESON_FC_LD@
+@MESON_WINDRES@
+@MESON_ADDITIONAL_BINARIES@
+[properties]
+cmake_toolchain_file = '@SCRIPTS@/buildsystems/vcpkg.cmake'
+[cmake]
+VCPKG_TARGET_TRIPLET = '@TARGET_TRIPLET@'
+VCPKG_HOST_TRIPLET = '@_HOST_TRIPLET@'
+VCPKG_CHAINLOAD_TOOLCHAIN_FILE = '@VCPKG_CHAINLOAD_TOOLCHAIN_FILE@'
+VCPKG_CRT_LINKAGE = '@VCPKG_CRT_LINKAGE@'
+_VCPKG_INSTALLED_DIR = '@_VCPKG_INSTALLED_DIR@'
+@MESON_HOST_MACHINE@
+@MESON_BUILD_MACHINE@
+[built-in options]
+default_library = '@MESON_DEFAULT_LIBRARY@'
+werror = false
+@MESON_CFLAGS@
+@MESON_CXXFLAGS@
+@MESON_FCFLAGS@
+@MESON_OBJCFLAGS@
+@MESON_OBJCPPFLAGS@
+# b_vscrt
+@MESON_VSCRT_LINKAGE@
+# c_winlibs/cpp_winlibs
+@MESON_WINLIBS@
\ No newline at end of file diff --git a/vcpkg/scripts/buildsystems/meson/none.txt b/vcpkg/scripts/buildsystems/meson/none.txt new file mode 100644 index 0000000..6dafc80 --- /dev/null +++ b/vcpkg/scripts/buildsystems/meson/none.txt @@ -0,0 +1,19 @@ +# native file used to make the build machine compiler unusable + +[host_machine] +system = 'none' +cpu_family = 'none' +cpu = 'none' +endian = 'little' + +[properties] + +[binaries] +c = ['false'] +cpp = ['false'] +objc = ['false'] +objcpp = ['false'] +ar = ['false'] +pkgconfig = ['false'] +cmake = ['false'] +ninja = ['false']
\ No newline at end of file diff --git a/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 b/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 new file mode 100644 index 0000000..7b6ad10 --- /dev/null +++ b/vcpkg/scripts/buildsystems/msbuild/applocal.ps1 @@ -0,0 +1,381 @@ +[cmdletbinding()] +param([string]$targetBinary, [string]$installedDir, [string]$tlogFile, [string]$copiedFilesLog) + +$g_searched = @{} +# Note: installedDir is actually the bin\ directory. +$g_install_root = Split-Path $installedDir -parent +$g_is_debug = (Split-Path $g_install_root -leaf) -eq 'debug' + +# Ensure we create the copied files log, even if we don't end up copying any files +if ($copiedFilesLog) +{ + Set-Content -Path $copiedFilesLog -Value "" -Encoding UTF8 +} + +function computeHash([System.Security.Cryptography.HashAlgorithm]$alg, [string]$str) { + $bytes = [System.Text.Encoding]::UTF8.GetBytes($str) + $hash = $alg.ComputeHash($bytes) + return [Convert]::ToBase64String($hash) +} + +function getMutex([string]$targetDir) { + try { + $sha512Hash = [System.Security.Cryptography.SHA512]::Create() + if ($sha512Hash) { + $hash = (computeHash $sha512Hash $targetDir) -replace ('/' ,'-') + $mtxName = "VcpkgAppLocalDeployBinary-" + $hash + return New-Object System.Threading.Mutex($false, $mtxName) + } + + return New-Object System.Threading.Mutex($false, "VcpkgAppLocalDeployBinary") + } + catch { + Write-Error -Message $_ -ErrorAction Stop + } +} + +# Note: this function signature is depended upon by the qtdeploy.ps1 script introduced in 5.7.1-7 +function deployBinary([string]$targetBinaryDir, [string]$SourceDir, [string]$targetBinaryName) { + try { + $mtx = getMutex($targetBinaryDir) + if ($mtx) { + $mtx.WaitOne() | Out-Null + } + + $sourceBinaryFilePath = Join-Path $SourceDir $targetBinaryName + $targetBinaryFilePath = Join-Path $targetBinaryDir $targetBinaryName + if (Test-Path $targetBinaryFilePath) { + $sourceModTime = (Get-Item $sourceBinaryFilePath).LastWriteTime + $destModTime = (Get-Item $targetBinaryFilePath).LastWriteTime + if ($destModTime -lt $sourceModTime) { + Write-Verbose " ${targetBinaryName}: Updating from $sourceBinaryFilePath" + Copy-Item $sourceBinaryFilePath $targetBinaryDir + } else { + Write-Verbose " ${targetBinaryName}: already present" + } + } + else { + Write-Verbose " ${targetBinaryName}: Copying $sourceBinaryFilePath" + Copy-Item $sourceBinaryFilePath $targetBinaryDir + } + if ($copiedFilesLog) { Add-Content $copiedFilesLog $targetBinaryFilePath -Encoding UTF8 } + if ($tlogFile) { Add-Content $tlogFile $targetBinaryFilePath -Encoding Unicode } + } finally { + if ($mtx) { + $mtx.ReleaseMutex() | Out-Null + $mtx.Dispose() | Out-Null + } + } +} + + +Write-Verbose "Resolving base path $targetBinary..." +try +{ + $baseBinaryPath = Resolve-Path $targetBinary -erroraction stop + $baseTargetBinaryDir = Split-Path $baseBinaryPath -parent +} +catch [System.Management.Automation.ItemNotFoundException] +{ + return +} + +# Note: this function signature is depended upon by the qtdeploy.ps1 script +function resolve([string]$targetBinary) { + Write-Verbose "Resolving $targetBinary..." + try + { + $targetBinaryPath = Resolve-Path $targetBinary -erroraction stop + } + catch [System.Management.Automation.ItemNotFoundException] + { + return + } + $targetBinaryDir = Split-Path $targetBinaryPath -parent + + if (Get-Command "dumpbin" -ErrorAction SilentlyContinue) { + $a = $(dumpbin /DEPENDENTS $targetBinaryPath| ? { $_ -match "^ [^ ].*\.dll" } | % { $_ -replace "^ ","" }) + } elseif (Get-Command "llvm-objdump" -ErrorAction SilentlyContinue) { + $a = $(llvm-objdump -p $targetBinary| ? { $_ -match "^ {4}DLL Name: .*\.dll" } | % { $_ -replace "^ {4}DLL Name: ","" }) + } elseif (Get-Command "objdump" -ErrorAction SilentlyContinue) { + $a = $(objdump -p $targetBinary| ? { $_ -match "^\tDLL Name: .*\.dll" } | % { $_ -replace "^\tDLL Name: ","" }) + } else { + Write-Error "Neither dumpbin, llvm-objdump nor objdump could be found. Can not take care of dll dependencies." + } + $a | % { + if ([string]::IsNullOrEmpty($_)) { + return + } + if ($g_searched.ContainsKey($_)) { + Write-Verbose " ${_}: previously searched - Skip" + return + } + $g_searched.Set_Item($_, $true) + $installedItemFilePath = Join-Path $installedDir $_ + $targetItemFilePath = Join-Path $targetBinaryDir $_ + if (Test-Path $installedItemFilePath) { + deployBinary $baseTargetBinaryDir $installedDir "$_" + if (Test-Path function:\deployPluginsIfQt) { deployPluginsIfQt $baseTargetBinaryDir (Join-Path $g_install_root 'plugins') "$_" } + if (Test-Path function:\deployOpenNI2) { deployOpenNI2 $targetBinaryDir "$g_install_root" "$_" } + if (Test-Path function:\deployPluginsIfMagnum) { + if ($g_is_debug) { + deployPluginsIfMagnum $targetBinaryDir (Join-Path (Join-Path "$g_install_root" 'bin') 'magnum-d') "$_" + } else { + deployPluginsIfMagnum $targetBinaryDir (Join-Path (Join-Path "$g_install_root" 'bin') 'magnum') "$_" + } + } + if (Test-Path function:\deployAzureKinectSensorSDK) { deployAzureKinectSensorSDK $targetBinaryDir "$g_install_root" "$_" } + resolve (Join-Path $baseTargetBinaryDir "$_") + } elseif (Test-Path $targetItemFilePath) { + Write-Verbose " ${_}: $_ not found in $g_install_root; locally deployed" + resolve "$targetItemFilePath" + } else { + Write-Verbose " ${_}: $installedItemFilePath not found" + } + } + Write-Verbose "Done Resolving $targetBinary." +} + +# Note: This is a hack to make Qt5 work. +# Introduced with Qt package version 5.7.1-7 +if (Test-Path "$g_install_root\plugins\qtdeploy.ps1") { + . "$g_install_root\plugins\qtdeploy.ps1" +} + +# Note: This is a hack to make OpenNI2 work. +if (Test-Path "$g_install_root\bin\OpenNI2\openni2deploy.ps1") { + . "$g_install_root\bin\OpenNI2\openni2deploy.ps1" +} + +# Note: This is a hack to make Magnum work. +if (Test-Path "$g_install_root\bin\magnum\magnumdeploy.ps1") { + . "$g_install_root\bin\magnum\magnumdeploy.ps1" +} elseif (Test-Path "$g_install_root\bin\magnum-d\magnumdeploy.ps1") { + . "$g_install_root\bin\magnum-d\magnumdeploy.ps1" +} + +# Note: This is a hack to make Azure Kinect Sensor SDK work. +if (Test-Path "$g_install_root\tools\azure-kinect-sensor-sdk\k4adeploy.ps1") { + . "$g_install_root\tools\azure-kinect-sensor-sdk\k4adeploy.ps1" +} + +resolve($targetBinary) +Write-Verbose $($g_searched | out-string) +
+# SIG # Begin signature block
+# MIIoKgYJKoZIhvcNAQcCoIIoGzCCKBcCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAPCoxRgOsQwKYR
+# diNJ8SfHF59GyFkX1iNO/sW50AoVpaCCDXYwggX0MIID3KADAgECAhMzAAAEBGx0
+# Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz
+# NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo
+# DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3
+# a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF
+# HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy
+# 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC
+# Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj
+# L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp
+# h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3
+# cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X
+# dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL
+# E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi
+# u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1
+# sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq
+# 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb
+# DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/
+# V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGgowghoGAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB
+# BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIKGXQChM8gl4w3O4Q77uhYIC
+# N4Xw2i3PcQfh25cSDxXfMEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A
+# cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB
+# BQAEggEAdElQMzqYJeI5VjvUwUbeC4Rl+3jdEFu7+ABP65psHgxJtMuIKx7tde7m
+# 5rkaP8bwld8rDZFCFpAObEIiunVk2yjxPsOf9j7ILbD9E9cUdLNXsm0ClfguSgSm
+# yXbhmmzARV7kbxCJZTKL2oevlzNzGDt6abVcvFLjy6WC4WpKV03KsT8a9ZtQlxfB
+# +i3Z8maqKrzEYmPO7XAruaRfuNbni9na4NxwvBq85Ddg91a1fdCGIxJ2D5Nptwl+
+# wgK27Gy/Rcy5opOVtHJsPSCConzxTTA5GayZNwGc6xAWshCHIyllqkGQzZOfXaGA
+# bqioVxyz/xR6HEP0T/ayjat9ielD9qGCF5QwgheQBgorBgEEAYI3AwMBMYIXgDCC
+# F3wGCSqGSIb3DQEHAqCCF20wghdpAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFSBgsq
+# hkiG9w0BCRABBKCCAUEEggE9MIIBOQIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl
+# AwQCAQUABCAzJNwcvpmSNekJRJlCTg5NQjLVOmc+ZPZXfg3zuNlg/QIGZ4kFjlwq
+# GBMyMDI1MDIxMTIyNTkwMy40NTFaMASAAgH0oIHRpIHOMIHLMQswCQYDVQQGEwJV
+# UzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UE
+# ChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1l
+# cmljYSBPcGVyYXRpb25zMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0w
+# NUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Wg
+# ghHqMIIHIDCCBQigAwIBAgITMwAAAevgGGy1tu847QABAAAB6zANBgkqhkiG9w0B
+# AQsFADB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYD
+# VQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMDAeFw0yMzEyMDYxODQ1
+# MzRaFw0yNTAzMDUxODQ1MzRaMIHLMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
+# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
+# cnBvcmF0aW9uMSUwIwYDVQQLExxNaWNyb3NvZnQgQW1lcmljYSBPcGVyYXRpb25z
+# MScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046QTAwMC0wNUUwLUQ5NDcxJTAjBgNV
+# BAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2UwggIiMA0GCSqGSIb3DQEB
+# AQUAA4ICDwAwggIKAoICAQDBFWgh2lbgV3eJp01oqiaFBuYbNc7hSKmktvJ15NrB
+# /DBboUow8WPOTPxbn7gcmIOGmwJkd+TyFx7KOnzrxnoB3huvv91fZuUugIsKTnAv
+# g2BU/nfN7Zzn9Kk1mpuJ27S6xUDH4odFiX51ICcKl6EG4cxKgcDAinihT8xroJWV
+# ATL7p8bbfnwsc1pihZmcvIuYGnb1TY9tnpdChWr9EARuCo3TiRGjM2Lp4piT2lD5
+# hnd3VaGTepNqyakpkCGV0+cK8Vu/HkIZdvy+z5EL3ojTdFLL5vJ9IAogWf3XAu3d
+# 7SpFaaoeix0e1q55AD94ZwDP+izqLadsBR3tzjq2RfrCNL+Tmi/jalRto/J6bh4f
+# PhHETnDC78T1yfXUQdGtmJ/utI/ANxi7HV8gAPzid9TYjMPbYqG8y5xz+gI/SFyj
+# +aKtHHWmKzEXPttXzAcexJ1EH7wbuiVk3sErPK9MLg1Xb6hM5HIWA0jEAZhKEyd5
+# hH2XMibzakbp2s2EJQWasQc4DMaF1EsQ1CzgClDYIYG6rUhudfI7k8L9KKCEufRb
+# K5ldRYNAqddr/ySJfuZv3PS3+vtD6X6q1H4UOmjDKdjoW3qs7JRMZmH9fkFkMzb6
+# YSzr6eX1LoYm3PrO1Jea43SYzlB3Tz84OvuVSV7NcidVtNqiZeWWpVjfavR+Jj/J
+# OQIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFHSeBazWVcxu4qT9O5jT2B+qAerhMB8G
+# A1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8GA1UdHwRYMFYwVKBSoFCG
+# Tmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY3JsL01pY3Jvc29mdCUy
+# MFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBsBggrBgEFBQcBAQRgMF4w
+# XAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvY2Vy
+# dHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUyMDIwMTAoMSkuY3J0MAwG
+# A1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwDgYDVR0PAQH/BAQD
+# AgeAMA0GCSqGSIb3DQEBCwUAA4ICAQCDdN8voPd8C+VWZP3+W87c/QbdbWK0sOt9
+# Z4kEOWng7Kmh+WD2LnPJTJKIEaxniOct9wMgJ8yQywR8WHgDOvbwqdqsLUaM4Nre
+# rtI6FI9rhjheaKxNNnBZzHZLDwlkL9vCEDe9Rc0dGSVd5Bg3CWknV3uvVau14F55
+# ESTWIBNaQS9Cpo2Opz3cRgAYVfaLFGbArNcRvSWvSUbeI2IDqRxC4xBbRiNQ+1qH
+# XDCPn0hGsXfL+ynDZncCfszNrlgZT24XghvTzYMHcXioLVYo/2Hkyow6dI7uULJb
+# KxLX8wHhsiwriXIDCnjLVsG0E5bR82QgcseEhxbU2d1RVHcQtkUE7W9zxZqZ6/jP
+# maojZgXQO33XjxOHYYVa/BXcIuu8SMzPjjAAbujwTawpazLBv997LRB0ZObNckJY
+# yQQpETSflN36jW+z7R/nGyJqRZ3HtZ1lXW1f6zECAeP+9dy6nmcCrVcOqbQHX7Zr
+# 8WPcghHJAADlm5ExPh5xi1tNRk+i6F2a9SpTeQnZXP50w+JoTxISQq7vBij2nitA
+# sSLaVeMqoPi+NXlTUNZ2NdtbFr6Iir9ZK9ufaz3FxfvDZo365vLOozmQOe/Z+pu4
+# vY5zPmtNiVIcQnFy7JZOiZVDI5bIdwQRai2quHKJ6ltUdsi3HjNnieuE72fT4eWh
+# xtmnN5HYCDCCB3EwggVZoAMCAQICEzMAAAAVxedrngKbSZkAAAAAABUwDQYJKoZI
+# hvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAw
+# DgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24x
+# MjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAy
+# MDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIyNVowfDELMAkGA1UEBhMC
+# VVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNV
+# BAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRp
+# bWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
+# AQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXIyjVX9gF/bErg4r25Phdg
+# M/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjoYH1qUoNEt6aORmsHFPPF
+# dvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1yaa8dq6z2Nr41JmTamDu6
+# GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v3byNpOORj7I5LFGc6XBp
+# Dco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pGve2krnopN6zL64NF50Zu
+# yjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viSkR4dPf0gz3N9QZpGdc3E
+# XzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYrbqgSUei/BQOj0XOmTTd0
+# lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlMjgK8QmguEOqEUUbi0b1q
+# GFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSLW6CmgyFdXzB0kZSU2LlQ
+# +QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AFemzFER1y7435UsSFF5PA
+# PBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIurQIDAQABo4IB3TCCAdkw
+# EgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIEFgQUKqdS/mTEmr6CkTxG
+# NSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMFwGA1UdIARV
+# MFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly93d3cubWlj
+# cm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5Lmh0bTATBgNVHSUEDDAK
+# BggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMC
+# AYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV9lbLj+iiXGJo0T2UkFvX
+# zpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20v
+# cGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAxMC0wNi0yMy5jcmwwWgYI
+# KwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2LTIzLmNydDANBgkqhkiG
+# 9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv6lwUtj5OR2R4sQaTlz0x
+# M7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZnOlNN3Zi6th542DYunKmC
+# VgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1bSNU5HhTdSRXud2f8449
+# xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4rPf5KYnDvBewVIVCs/wM
+# nosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU6ZGyqVvfSaN0DLzskYDS
+# PeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDFNLB62FD+CljdQDzHVG2d
+# Y3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/HltEAY5aGZFrDZ+kKNxn
+# GSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdUCbFpAUR+fKFhbHP+Crvs
+# QWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKiexcdFYmNcP7ntdAoGokL
+# jzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTmdHRbatGePu1+oDEzfbzL
+# 6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZqELQdVTNYs6FwZvKhggNN
+# MIICNQIBATCB+aGB0aSBzjCByzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hp
+# bmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jw
+# b3JhdGlvbjElMCMGA1UECxMcTWljcm9zb2Z0IEFtZXJpY2EgT3BlcmF0aW9uczEn
+# MCUGA1UECxMeblNoaWVsZCBUU1MgRVNOOkEwMDAtMDVFMC1EOTQ3MSUwIwYDVQQD
+# ExxNaWNyb3NvZnQgVGltZS1TdGFtcCBTZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQCA
+# Bol1u1wwwYgUtUowMnqYvbul3qCBgzCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
+# IFBDQSAyMDEwMA0GCSqGSIb3DQEBCwUAAgUA61XIvDAiGA8yMDI1MDIxMTEzMDE0
+# OFoYDzIwMjUwMjEyMTMwMTQ4WjB0MDoGCisGAQQBhFkKBAExLDAqMAoCBQDrVci8
+# AgEAMAcCAQACAi9hMAcCAQACAhOfMAoCBQDrVxo8AgEAMDYGCisGAQQBhFkKBAIx
+# KDAmMAwGCisGAQQBhFkKAwKgCjAIAgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZI
+# hvcNAQELBQADggEBAD6H5DfxDH13zge8sACqi3N2/lMGFQGmKFkQc1pir+PKzpoH
+# NY/6tksxfOCv2+s2ppqF85vcI4HDeMBiLX/sWiWkDZilmpwGTda+pACe54HjLc1q
+# cRjr3s1tLYtPXD58rFb0Xr/Vn0hiE02Ikv62Qi+ief8Viq9W7+URmh2DwhK0VqNl
+# 4P14D30BH+E/zrn45VPDLKq9RjbiRUBiw3fODJXRyFzs8g1qK8cJPtOZlNrM1d49
+# ZAuWTCyoT4DSiWDYacX120VmNLvfcN0CKAiS7tidTPH6cPjwhRmg32DRe/cEERX/
+# r1n1K3jvTQ5ukyOkgSWgHMGg//S+e8DJb2bZ9JIxggQNMIIECQIBATCBkzB8MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNy
+# b3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAxMAITMwAAAevgGGy1tu847QABAAAB6zAN
+# BglghkgBZQMEAgEFAKCCAUowGgYJKoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8G
+# CSqGSIb3DQEJBDEiBCBoq5HpKXoSCBggNEsfWIj734LFFatqEPN7OGY8pjWVyzCB
+# +gYLKoZIhvcNAQkQAi8xgeowgecwgeQwgb0EIM63a75faQPhf8SBDTtk2DSUgIbd
+# izXsz76h1JdhLCz4MIGYMIGApH4wfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldh
+# c2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBD
+# b3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIw
+# MTACEzMAAAHr4BhstbbvOO0AAQAAAeswIgQgFL25G8cMbJo721Nr6Ya+Eu/TrhUP
+# fOiM1q5E8puXODswDQYJKoZIhvcNAQELBQAEggIAu9ymfRN7+ESWl0DWxVsUO5Nz
+# rZ9UNElXdTANL4CxzKjBsRaj7MAQyVPF9u8UjIHBenar8tO2QQozooAc48oahV5d
+# V8wmdxFOOXRrG7Hm2Bth5ETeUlagCD8avZ4mCiCWCR94IHWVZX0WrtHBs60nn/Ou
+# mL7FelZmzUBkqpwJuBH3KcLx6oix4REGMGzSRMzY01tQGWFu6M83O4bV0OIdZ7qD
+# m5xvRybREJIkV995bmNFoIbjei3VNs8xWaAo3UN3MWfX+qujqmIkO3DhQwSkACG0
+# aH1svjAVA6CMpCkWWddeaFXnCgMpr1MzGXuzCJH8DHY8MnlXnX4A1lVc6DQmRf2a
+# gfi1K37c7ktfsM1CZ6XYUJp19p1QgeaHNSHJusPhOzkN6bx13vgzODppmpPf94D0
+# 1v9YL+enSq6ePTZfe9bxkCaDB8MwEEC9nFy/3mTHacBniqgY81ymW8kCNgqDFsME
+# qdcoelRLY2MkJxPutT+CteNNHPP9X04Goy7X8UDFKqlgJEFai7psevUMiZ2F6hz/
+# lxv5nsbWDOl1OOisXcuwbAcFmKUdiNAz7AaP5LJ9OvjKg5SsYrhSgyqi5x5mGW8R
+# rjcZiCT+RSjLidBLbkW3gSmApmr7muRY4/yP7EREoXEQvH3vaukHBEyPxDe095TK
+# tIl2kFAoHb2cc1Cmr+A=
+# SIG # End signature block
diff --git a/vcpkg/scripts/buildsystems/msbuild/vcpkg-general.xml b/vcpkg/scripts/buildsystems/msbuild/vcpkg-general.xml new file mode 100644 index 0000000..af45f5c --- /dev/null +++ b/vcpkg/scripts/buildsystems/msbuild/vcpkg-general.xml @@ -0,0 +1,97 @@ +<?xml version="1.0" encoding="utf-8"?> +<Rule Name="VcpkgOptions" DisplayName="vcpkg" PageTemplate="generic" Description="Vcpkg" + xmlns="http://schemas.microsoft.com/build/2009/properties"> + + <Rule.Categories> + <Category Name="General" DisplayName="General" Description="General Vcpkg Configuration" /> + <Category Name="Conditional" DisplayName="Target and Configuration Specific" Description="Conditional Vcpkg Configuration" /> + </Rule.Categories> + + <Rule.DataSource> + <!-- Note: HasConfigurationCondition must be either "true" or ommitted. Otherwise, the vcpkg property sheet will not be displayed. --> + <!-- Note: Remove all instances of 'Label="Vcpkg"' from this file if the vcpkg property sheet does not display any values. --> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="true" /> + </Rule.DataSource> + + <BoolProperty Name="VcpkgEnabled" DisplayName="Use Vcpkg" Category="General" Default="true" + Description="Use Vcpkg for includes and libraries."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <BoolProperty Name="VcpkgEnableManifest" DisplayName="Use Vcpkg Manifest" Category="General" Default="false" + Description="Use the vcpkg manifest file to define your dependencies."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <BoolProperty Name="VcpkgManifestInstall" DisplayName="Install Vcpkg Dependencies" Category="General" Default="true" + Description="Install dependencies from the vcpkg manifest."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <BoolProperty Name="VcpkgAutoLink" DisplayName="Use AutoLink" Category="General" Default="true" + Description="Enables automatic linking with libraries build using Vcpkg. Does not work with lld-link.exe."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <BoolProperty Name="VcpkgApplocalDeps" DisplayName="App-locally deploy DLLs" Category="General" Default="true" + Description="Copies DLL dependencies from the vcpkg installed tree to the project output directory."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <BoolProperty Name="VcpkgXUseBuiltInApplocalDeps" DisplayName="Use built-in app-local deployment" Category="General" Default="false" + Description="(experimental) When copying DLL dependencies, use built-in-to-vcpkg implementation rather than PowerShell script."> + <BoolProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </BoolProperty.DataSource> + </BoolProperty> + + <StringProperty Name="VcpkgRoot" DisplayName="Vcpkg Root" Category="General" Subtype="folder" Visible="false" + Description="Root path where Vcpkg is located. Be careful with changing this one. It is, for example, unable to update this property page from the new location without restarting visual studio."> + <StringProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </StringProperty.DataSource> + </StringProperty> + + <StringProperty Name="VcpkgManifestRoot" DisplayName="Vcpkg Manifest Root" Category="General" Subtype="folder" Visible="false" + Description="The path to the directory which contains the manifest file, and the vcpkg_installed directory."> + <StringProperty.DataSource> + <DataSource Persistence="ProjectFile" Label="Vcpkg" HasConfigurationCondition="false" /> + </StringProperty.DataSource> + </StringProperty> + + <StringProperty Name="VcpkgInstalledDir" DisplayName="Installed Directory" Category="General" Subtype="folder" Visible="true" + Description="The location where headers and binaries will be consumed from. In manifest mode, this directory will be created and populated based on vcpkg.json."> + </StringProperty> + + <BoolProperty Name="VcpkgUseStatic" DisplayName="Use Static Libraries" Category="Conditional" Default="false" + Description="Vcpkg can build static libraries (e.g. x64-windows-static). This options changes the default triplet to use these static libraries by appending -static to $(VcpkgTriplet). This will not be shown in the evaluation of the Triplet within the UI." /> + + <BoolProperty Name="VcpkgUseMD" DisplayName="Use Dynamic CRT" Category="Conditional" Default="false" + Description="Only effective if 'Use Static Libraries' is selected. Vcpkg can build static libraries compiled against MSVC runtime (e.g. x64-windows-static-md). This options changes the default triplet to use these static libraries by appending -md to $(VcpkgTriplet). This will not be shown in the evaluation of the Triplet within the UI." /> + + <StringProperty Name="VcpkgTriplet" DisplayName="Triplet" Category="Conditional" Subtype="Text" + Description="Specifies the triplet used by Vcpkg. Does not include the '-static' or '-static-md' suffixes that may be added by the 'Use static libraries' and 'Use Dynamic CRT' flags." /> + + <StringProperty Name="VcpkgHostTriplet" DisplayName="Host Triplet" Category="Conditional" Subtype="Text" + Description="Specifies the host triplet used by Vcpkg. If empty, this will be automatically determined." /> + + <StringProperty Name="VcpkgAdditionalInstallOptions" DisplayName="Additional Options" Category="General" Subtype="Text" + Description="Additional command line options to be passed to the underlying vcpkg tool when installing in manifest mode." /> + + <EnumProperty Name="VcpkgConfiguration" DisplayName="Vcpkg Configuration" Category="Conditional" + Description="Specifies if release or debug libraries build with vcpkg should be used."> + <EnumValue Name="Release" Description="Uses release libraries" /> + <EnumValue Name="Debug" Description="Uses debug libraries" /> + </EnumProperty> + +</Rule> diff --git a/vcpkg/scripts/buildsystems/msbuild/vcpkg.props b/vcpkg/scripts/buildsystems/msbuild/vcpkg.props new file mode 100644 index 0000000..a2f8adc --- /dev/null +++ b/vcpkg/scripts/buildsystems/msbuild/vcpkg.props @@ -0,0 +1,47 @@ +<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <!-- Do not define derived properties here. This file may be imported once and some of the properties below may be overridden afterwards -->
+ <PropertyGroup>
+ <VcpkgPropsImported>true</VcpkgPropsImported>
+ <VcpkgEnabled Condition="'$(VcpkgEnabled)' == ''">true</VcpkgEnabled>
+ </PropertyGroup>
+
+ <!-- Set the default value of $(VcpkgConfiguration) according to $(UseDebugLibraries) and $(Configuration) -->
+ <Choose>
+ <When Condition="'$(VcpkgConfiguration)' != ''" />
+ <When Condition="'$(UseDebugLibraries)' == ''">
+ <PropertyGroup>
+ <VcpkgConfiguration>$(Configuration)</VcpkgConfiguration>
+ </PropertyGroup>
+ </When>
+ <When Condition="'$(UseDebugLibraries)' == 'true'">
+ <PropertyGroup>
+ <VcpkgConfiguration>Debug</VcpkgConfiguration>
+ </PropertyGroup>
+ </When>
+ <Otherwise>
+ <PropertyGroup>
+ <VcpkgConfiguration>Release</VcpkgConfiguration>
+ </PropertyGroup>
+ </Otherwise>
+ </Choose>
+
+ <PropertyGroup>
+ <VcpkgUseStatic Condition="'$(VcpkgUseStatic)' == ''">false</VcpkgUseStatic>
+ <VcpkgRoot Condition="'$(VcpkgRoot)' == ''">$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\..\..'))</VcpkgRoot>
+
+ <VcpkgAutoLink Condition="'$(VcpkgAutoLink)' == ''">true</VcpkgAutoLink>
+ <!-- Deactivate Autolinking if lld is used as a linker. (Until a better way to solve the problem is found!).
+ Tried to add /lib as a parameter to the linker call but was unable to find a way to pass it as the first parameter. -->
+ <VcpkgAutoLink Condition="'$(UseLldLink)' == 'true' OR '$(PlatformToolset.ToLower())' == 'clangcl'">false</VcpkgAutoLink>
+ <VcpkgApplocalDeps Condition="'$(VcpkgApplocalDeps)' == ''">true</VcpkgApplocalDeps>
+ <VcpkgXUseBuiltInApplocalDeps Condition="'$(VcpkgXUseBuiltInApplocalDeps)' == ''">false</VcpkgXUseBuiltInApplocalDeps>
+
+ <!-- Classic Mode: The following line is edited by the mint standalone bundle script to be false for standlone copies -->
+ <VcpkgEnableClassic Condition="'$(VcpkgEnableClassic)' == ''">true</VcpkgEnableClassic>
+
+ <!-- Manifest files -->
+ <VcpkgEnableManifest Condition="'$(VcpkgEnableManifest)' == ''">false</VcpkgEnableManifest>
+ <VcpkgManifestInstall Condition="'$(VcpkgManifestInstall)' == ''">true</VcpkgManifestInstall>
+ <VcpkgManifestRoot Condition="'$(VcpkgManifestRoot)' == ''">$([MSbuild]::GetDirectoryNameOfFileAbove($(MSBuildProjectDirectory), vcpkg.json))</VcpkgManifestRoot>
+ </PropertyGroup>
+</Project>
diff --git a/vcpkg/scripts/buildsystems/msbuild/vcpkg.targets b/vcpkg/scripts/buildsystems/msbuild/vcpkg.targets new file mode 100644 index 0000000..23ddb19 --- /dev/null +++ b/vcpkg/scripts/buildsystems/msbuild/vcpkg.targets @@ -0,0 +1,259 @@ +<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + + <!-- Import default properties if not done yet. This does not overwrite any previously defined properties. --> + <Import Condition="'$(VcpkgPropsImported)' != 'true'" Project="vcpkg.props" /> + + <!-- VS2015's version of "vcpkg integrate install" imports both the props and targets together in the "props" area, + meaning we have no opportunity to respond to user customizations in their project files. It also means that this + .targets must defend against normal properties being unset. (For example, VcpkgPlatformTarget below.) + + Also, we copy all initial values to internal values to avoid properties being inconsistently evaluated in targets + and dependent properties. + --> + + <PropertyGroup> + <_ZVcpkgRoot>$(VcpkgRoot)</_ZVcpkgRoot> + <_ZVcpkgManifestRoot>$(VcpkgManifestRoot)</_ZVcpkgManifestRoot> + <_ZVcpkgInstalledDir>$(VcpkgInstalledDir)</_ZVcpkgInstalledDir> + </PropertyGroup> + + <!-- Add trailing slashes to inputs that must have them to conform with msbuild conventions. --> + <PropertyGroup> + <_ZVcpkgRoot Condition="!$(_ZVcpkgRoot.EndsWith('\'))">$(_ZVcpkgRoot)\</_ZVcpkgRoot> + <_ZVcpkgManifestRoot Condition="'$(_ZVcpkgManifestRoot)' != '' and !$(_ZVcpkgManifestRoot.EndsWith('\'))">$(_ZVcpkgManifestRoot)\</_ZVcpkgManifestRoot> + <_ZVcpkgInstalledDir Condition="'$(_ZVcpkgInstalledDir)' != '' and !$(_ZVcpkgInstalledDir.EndsWith('\'))">$(_ZVcpkgInstalledDir)\</_ZVcpkgInstalledDir> + </PropertyGroup> + + <PropertyGroup> + <_ZVcpkgClassicOrManifest Condition="'$(VcpkgEnabled)' == 'true' And ('$(VcpkgEnableClassic)' == 'true' Or '$(VcpkgEnableManifest)' == 'true')">true</_ZVcpkgClassicOrManifest> + <_ZVcpkgClassicOrManifest Condition="'$(_ZVcpkgClassicOrManifest)' == ''">false</_ZVcpkgClassicOrManifest> + </PropertyGroup> + + <!-- Special-case custom MSBuild platforms defined in the Microsoft GDK. See https://aka.ms/gdk and https://aka.ms/gdkx --> + <PropertyGroup Condition="'$(VcpkgOSTarget)' == '' AND '$(VcpkgPlatformTarget)' == '' AND '$(Platform)'=='Gaming.Desktop.x64'"> + <VcpkgOSTarget>windows</VcpkgOSTarget> + <VcpkgPlatformTarget>x64</VcpkgPlatformTarget> + <VcpkgUseMD>true</VcpkgUseMD> + </PropertyGroup> + <PropertyGroup Condition="'$(VcpkgOSTarget)' == '' AND '$(VcpkgPlatformTarget)' == '' AND '$(Platform)'=='Gaming.Xbox.Scarlett.x64'"> + <VcpkgOSTarget>xbox-scarlett</VcpkgOSTarget> + <VcpkgPlatformTarget>x64</VcpkgPlatformTarget> + <VcpkgUseMD>false</VcpkgUseMD> + </PropertyGroup> + <PropertyGroup Condition="'$(VcpkgOSTarget)' == '' AND '$(VcpkgPlatformTarget)' == '' AND '$(Platform)'=='Gaming.Xbox.XboxOne.x64'"> + <VcpkgOSTarget>xbox-xboxone</VcpkgOSTarget> + <VcpkgPlatformTarget>x64</VcpkgPlatformTarget> + <VcpkgUseMD>false</VcpkgUseMD> + </PropertyGroup> + + <!-- Determine the triplet to use. Note that $(PlatformTarget) is not available at the top of the .vcxproj file. --> + <PropertyGroup Condition="'$(VcpkgOSTarget)' == ''"> + <VcpkgOSTarget>windows</VcpkgOSTarget> + <VcpkgOSTarget Condition="'$(AppContainerApplication)' == 'true'">uwp</VcpkgOSTarget> + </PropertyGroup> + + <PropertyGroup Condition="'$(VcpkgPlatformTarget)' == ''"> + <VcpkgPlatformTarget>$(Platform.ToLower())</VcpkgPlatformTarget> + <VcpkgPlatformTarget Condition="'$(VcpkgPlatformTarget)' == 'win32'">x86</VcpkgPlatformTarget> + </PropertyGroup> + + <PropertyGroup> + <_ZVcpkgLinkage /> + <_ZVcpkgLinkage Condition="'$(VcpkgUseStatic)' == 'true'">-static</_ZVcpkgLinkage> + <_ZVcpkgLinkageMD /> + <_ZVcpkgLinkageMD Condition="'$(VcpkgUseStatic)' == 'true' and '$(VcpkgUseMD)' == 'true'">-md</_ZVcpkgLinkageMD> + <VcpkgTriplet Condition="'$(VcpkgTriplet)' == ''">$(VcpkgPlatformTarget)-$(VcpkgOSTarget)$(_ZVcpkgLinkage)$(_ZVcpkgLinkageMD)</VcpkgTriplet> + <VcpkgTriplet Condition="!$(VcpkgTriplet.EndsWith($(_ZVcpkgLinkage)$(_ZVcpkgLinkageMD)))">$(VcpkgTriplet)$(_ZVcpkgLinkage)$(_ZVcpkgLinkageMD)</VcpkgTriplet> + </PropertyGroup> + + <!-- Include the triplet in ProjectStateLine to force VS2017 and later to fully rebuild if the user changes it. --> + <PropertyGroup> + <ProjectStateLine>VcpkgTriplet=$(VcpkgTriplet):$(ProjectStateLine)</ProjectStateLine> + </PropertyGroup> + + <!-- Determine the locations trees we want to consume. _ZVcpkgInstalledDir is special in that it doesn't have a default + value in the .props because we normally derive it, but users may override the value. --> + <Choose> + <When Condition="'$(VcpkgEnableManifest)' == 'true'"> + <PropertyGroup> + <_ZVcpkgInstalledDir Condition="'$(_ZVcpkgInstalledDir)' == ''">$(_ZVcpkgManifestRoot)vcpkg_installed\$(VcpkgTriplet)\</_ZVcpkgInstalledDir> + </PropertyGroup> + </When> + <Otherwise> + <PropertyGroup> + <_ZVcpkgInstalledDir Condition="'$(_ZVcpkgInstalledDir)' == ''">$(_ZVcpkgRoot)installed\</_ZVcpkgInstalledDir> + </PropertyGroup> + </Otherwise> + </Choose> + + <PropertyGroup> + <_ZVcpkgCurrentInstalledDir>$(_ZVcpkgInstalledDir)$(VcpkgTriplet)\</_ZVcpkgCurrentInstalledDir> + <_ZVcpkgNormalizedConfiguration Condition="$(VcpkgConfiguration.StartsWith('Debug'))">Debug</_ZVcpkgNormalizedConfiguration> + <_ZVcpkgNormalizedConfiguration Condition="$(VcpkgConfiguration.StartsWith('Release')) or '$(VcpkgConfiguration)' == 'RelWithDebInfo' or '$(VcpkgConfiguration)' == 'MinSizeRel'">Release</_ZVcpkgNormalizedConfiguration> + + <_ZVcpkgConfigSubdir Condition="'$(_ZVcpkgNormalizedConfiguration)' == 'Debug'">debug\</_ZVcpkgConfigSubdir> + <_ZVcpkgExecutable>$(_ZVcpkgRoot)vcpkg.exe</_ZVcpkgExecutable> + <ExternalIncludePath Condition="'$(_ZVcpkgClassicOrManifest)' == 'true'">$(ExternalIncludePath);$(_ZVcpkgCurrentInstalledDir)include</ExternalIncludePath> + </PropertyGroup> + + <PropertyGroup> + <!-- Note: Overwrite VcpkgPageSchema with a non-existing path to disable the VcPkg property sheet in your projects --> + <VcpkgPageSchema Condition="'$(VcpkgPageSchema)' == ''">$(_ZVcpkgRoot)scripts\buildsystems\msbuild\vcpkg-general.xml</VcpkgPageSchema> + </PropertyGroup> + + <ItemGroup Condition="'$(VcpkgPageSchema)' != '' and exists('$(VcpkgPageSchema)') and '$(MSBuildToolsVersion)' != '14.0'"> + <PropertyPageSchema Include="$(VcpkgPageSchema)"> + <Context>Project</Context> + </PropertyPageSchema> + </ItemGroup> + + <!-- Install settings to get headers and import libs for the currently selected _ZVcpkgCurrentInstalledDir --> + <ItemDefinitionGroup Condition="'$(_ZVcpkgClassicOrManifest)' == 'true'"> + <Lib> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)lib;$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)lib\manual-link</AdditionalLibraryDirectories> + </Lib> + <Link> + <AdditionalDependencies Condition="'$(VcpkgAutoLink)' != 'false'">%(AdditionalDependencies);$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)lib\*.lib</AdditionalDependencies> + <AdditionalLibraryDirectories>%(AdditionalLibraryDirectories);$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)lib;$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)lib\manual-link</AdditionalLibraryDirectories> + </Link> + <ClCompile> + <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(_ZVcpkgCurrentInstalledDir)include</AdditionalIncludeDirectories> + </ClCompile> + <ResourceCompile> + <AdditionalIncludeDirectories>%(AdditionalIncludeDirectories);$(_ZVcpkgCurrentInstalledDir)include</AdditionalIncludeDirectories> + </ResourceCompile> + </ItemDefinitionGroup> + + <Target Name="VcpkgCheckManifestRoot" BeforeTargets="VcpkgInstallManifestDependencies" Condition="'$(VcpkgEnabled)' == 'true'"> + <Error Text="The vcpkg manifest was enabled, but we couldn't find a manifest file (vcpkg.json) in any directories above $(MSBuildProjectDirectory). Please add a manifest, disable manifests in your properties page, or pass /p:VcpkgEnableManifest=false." + Condition="'$(VcpkgEnableManifest)' == 'true' and '$(_ZVcpkgManifestRoot)' == ''" /> + <Message Text="The vcpkg manifest was disabled, but we found a manifest file in $(_ZVcpkgManifestRoot). You may want to enable vcpkg manifests in your properties page or pass /p:VcpkgEnableManifest=true to the msbuild invocation." + Importance="High" Condition="'$(VcpkgEnableManifest)' != 'true' and '$(_ZVcpkgManifestRoot)' != ''" /> + </Target> + + <Target Name="VcpkgTripletSelection" BeforeTargets="ClCompile" Condition="'$(_ZVcpkgClassicOrManifest)' == 'true'"> + <Message Text="Using triplet "$(VcpkgTriplet)" from "$(_ZVcpkgCurrentInstalledDir)"" + Importance="Normal" Condition="'$(VcpkgEnabled)' == 'true'"/> + <Message Text="Using normalized configuration "$(_ZVcpkgNormalizedConfiguration)"" + Importance="Normal" Condition="'$(VcpkgEnabled)' == 'true'"/> + <Message Text="Not using Vcpkg because VcpkgEnabled is "$(VcpkgEnabled)"" + Importance="Normal" Condition="'$(VcpkgEnabled)' != 'true'"/> + <Message Text="Vcpkg is unable to link because we cannot decide between Release and Debug libraries. Please define the property VcpkgConfiguration to be 'Release' or 'Debug' (currently '$(VcpkgConfiguration)')." + Importance="High" Condition="'$(VcpkgEnabled)' == 'true' and '$(_ZVcpkgNormalizedConfiguration)' == ''"/> + </Target> + + <Choose> + <When Condition="'$(VcpkgHostTriplet)' != ''"> + <PropertyGroup> + <_ZVcpkgHostTripletParameter>"--host-triplet=$(VcpkgHostTriplet)"</_ZVcpkgHostTripletParameter> + <_ZVcpkgHostTripletSuffix>$(VcpkgHostTriplet).</_ZVcpkgHostTripletSuffix> + </PropertyGroup> + </When> + <Otherwise> + <PropertyGroup> + <_ZVcpkgHostTripletParameter /> + <_ZVcpkgHostTripletSuffix /> + </PropertyGroup> + </Otherwise> + </Choose> + + <PropertyGroup> + <_ZVcpkgManifestFileLocation>$(_ZVcpkgManifestRoot)vcpkg.json</_ZVcpkgManifestFileLocation> + <_ZVcpkgConfigurationFileLocation>$(_ZVcpkgManifestRoot)vcpkg-configuration.json</_ZVcpkgConfigurationFileLocation> + <_ZVcpkgMSBuildStampFile>$(_ZVcpkgInstalledDir).msbuildstamp-$(VcpkgTriplet).$(_ZVcpkgHostTripletSuffix)stamp</_ZVcpkgMSBuildStampFile> + </PropertyGroup> + + <ItemGroup Condition="'$(VcpkgEnabled)' == 'true' and '$(VcpkgEnableManifest)' == 'true' and '$(VcpkgManifestInstall)' == 'true'"> + <_ZVcpkgInstallManifestDependenciesInputs Include="$(_ZVcpkgManifestFileLocation)"/> + <_ZVcpkgInstallManifestDependenciesInputs Include="$(_ZVcpkgConfigurationFileLocation)" Condition="Exists('$(_ZVcpkgConfigurationFileLocation)')"/> + </ItemGroup> + + <Target Name="VcpkgInstallManifestDependencies" BeforeTargets="ClCompile" + Condition="'$(VcpkgEnabled)' == 'true' and '$(VcpkgEnableManifest)' == 'true' and '$(VcpkgManifestInstall)' == 'true'" + Inputs="@(_ZVcpkgInstallManifestDependenciesInputs)" + Outputs="$(_ZVcpkgMSBuildStampFile)"> + <!-- This is set inside the target because $(TLogLocation) may not be set yet when parsing the .targets on VS2015 --> + <PropertyGroup> + <_ZVcpkgTLogFileLocation>$(TLogLocation)VcpkgInstallManifest$(VcpkgTriplet).$(_ZVcpkgHostTripletSuffix)read.1u.tlog</_ZVcpkgTLogFileLocation> + </PropertyGroup> + <Message Text="Installing vcpkg dependencies to $(_ZVcpkgInstalledDir)" Importance="High" /> + <MakeDir Directories="$(_ZVcpkgInstalledDir)" /> + <Message Text="%22$(_ZVcpkgExecutable)%22 install $(_ZVcpkgHostTripletParameter) --x-wait-for-lock --triplet %22$(VcpkgTriplet)%22 --vcpkg-root %22$(_ZVcpkgRoot)\%22 %22--x-manifest-root=$(_ZVcpkgManifestRoot)\%22 %22--x-install-root=$(_ZVcpkgInstalledDir)\%22 $(VcpkgAdditionalInstallOptions)" + Importance="High" /> + <Exec Command="%22$(_ZVcpkgExecutable)%22 install $(_ZVcpkgHostTripletParameter) --x-wait-for-lock --triplet %22$(VcpkgTriplet)%22 --vcpkg-root %22$(_ZVcpkgRoot)\%22 %22--x-manifest-root=$(_ZVcpkgManifestRoot)\%22 %22--x-install-root=$(_ZVcpkgInstalledDir)\%22 $(VcpkgAdditionalInstallOptions)" + StandardOutputImportance="High" + StandardErrorImportance="High" + UseUtf8Encoding="Always" + StdOutEncoding="utf-8" + StdErrEncoding="utf-8" + UseCommandProcessor="false" + /> + <WriteLinesToFile File="$(_ZVcpkgTLogFileLocation)" + Lines="@(_ZVcpkgInstallManifestDependenciesInputs -> '^%(Identity)')" + Encoding="Unicode" + Overwrite="true"/> + <Touch Files="$(_ZVcpkgMSBuildStampFile)" AlwaysCreate="true" /> + + <CreateProperty Value="false"> + <Output TaskParameter="ValueSetByTask" PropertyName="Link_MinimalRebuildFromTracking" /> + </CreateProperty> + </Target> + + <Target Name="AppLocalFromInstalled" AfterTargets="CopyFilesToOutputDirectory" BeforeTargets="CopyLocalFilesOutputGroup;RegisterOutput" + Condition="'$(_ZVcpkgClassicOrManifest)' == 'true' and '$(VcpkgApplocalDeps)' == 'true' and '$(LinkSkippedExecution)' != 'true' and '@(Link)' != ''"> + <Message Text="[vcpkg] Starting VcpkgApplocalDeps" Importance="low" /> + <PropertyGroup> + <_ZVcpkgApplocalInstalledBinDir>$(_ZVcpkgCurrentInstalledDir)$(_ZVcpkgConfigSubdir)bin</_ZVcpkgApplocalInstalledBinDir> + <_ZVcpkgApplocalTLogPath>$(TLogLocation)$(ProjectName).write.1u.tlog</_ZVcpkgApplocalTLogPath> + <_ZVcpkgApplocalCopiedFilesLogPath>$(IntDir)vcpkg.applocal.log</_ZVcpkgApplocalCopiedFilesLogPath> + <_ZVcpkgApplocalBuiltinArguments>--target-binary="$(TargetPath)" --installed-bin-dir="$(_ZVcpkgApplocalInstalledBinDir)" --tlog-file="$(_ZVcpkgApplocalTLogPath)" --copied-files-log="$(_ZVcpkgApplocalCopiedFilesLogPath)"</_ZVcpkgApplocalBuiltinArguments> + <_ZVcpkgAppLocalPowerShellCommonArguments>-ExecutionPolicy Bypass -noprofile -File "$(MSBuildThisFileDirectory)applocal.ps1" "$(TargetPath)" "$(_ZVcpkgApplocalInstalledBinDir)" "$(_ZVcpkgApplocalTLogPath)" "$(_ZVcpkgApplocalCopiedFilesLogPath)"</_ZVcpkgAppLocalPowerShellCommonArguments> + </PropertyGroup> + <Exec + Condition="'$(VcpkgXUseBuiltInApplocalDeps)' == 'true'" + Command="%22$(_ZVcpkgExecutable)%22 z-applocal $(_ZVcpkgApplocalBuiltinArguments)" + UseUtf8Encoding="Always" + StdOutEncoding="utf-8" + StdErrEncoding="utf-8" + UseCommandProcessor="false" + IgnoreExitCode="true"> + <Output TaskParameter="ExitCode" + PropertyName="_ZVcpkgAppLocalExitCode" /> + </Exec> + <Warning Text="[vcpkg] Failed to gather app local DLL dependencies, program may not run. Set VcpkgApplocalDeps to false in your project file to suppress this warning. Builtin arguments: $(_ZVcpkgApplocalBuiltinArguments)" + Condition="$(_ZVcpkgAppLocalExitCode) != 0 and '$(VcpkgXUseBuiltInApplocalDeps)' == 'true'"/> + + <!-- Search %PATH% for pwsh.exe if it is available. --> + <Exec + Condition="'$(VcpkgXUseBuiltInApplocalDeps)' != 'true'" + Command="pwsh.exe $(_ZVcpkgAppLocalPowerShellCommonArguments)" + IgnoreExitCode="true" + UseCommandProcessor="false"> + <Output TaskParameter="ExitCode" + PropertyName="_ZVcpkgAppLocalExitCode" /> + </Exec> + <!-- Fall back to well known system PowerShell location otherwise. --> + <Message Text="[vcpkg] Failed to run applocal.ps1 using pwsh, falling back to system PowerShell." Importance="low" + Condition="$(_ZVcpkgAppLocalExitCode) == 9009" /> + <Exec + Command="%22$(SystemRoot)\System32\WindowsPowerShell\v1.0\powershell.exe%22 $(_ZVcpkgAppLocalPowerShellCommonArguments)" + IgnoreExitCode="true" + UseCommandProcessor="false" + Condition="$(_ZVcpkgAppLocalExitCode) == 9009 and '$(VcpkgXUseBuiltInApplocalDeps)' != 'true'"> + <Output TaskParameter="ExitCode" + PropertyName="_ZVcpkgAppLocalExitCode" /> + </Exec> + <!-- We're ignoring the above exit codes, so translate into a warning if both failed. --> + <Warning Text="[vcpkg] Failed to gather app local DLL dependencies, program may not run. Set VcpkgApplocalDeps to false in your project file to suppress this warning. PowerShell arguments: $(_ZVcpkgAppLocalPowerShellCommonArguments)" + Condition="$(_ZVcpkgAppLocalExitCode) != 0 and '$(VcpkgXUseBuiltInApplocalDeps)' != 'true'"/> + + <ReadLinesFromFile File="$(IntDir)vcpkg.applocal.log" + Condition="$(_ZVcpkgAppLocalExitCode) == 0"> + <Output TaskParameter="Lines" ItemName="VcpkgAppLocalDLLs" /> + </ReadLinesFromFile> + <Message Text="@(VcpkgAppLocalDLLs,'%0A')" Importance="Normal" Condition="$(_ZVcpkgAppLocalExitCode) == 0" /> + <ItemGroup Condition="$(_ZVcpkgAppLocalExitCode) == 0"> + <ReferenceCopyLocalPaths Include="@(VcpkgAppLocalDLLs)" /> + </ItemGroup> + </Target> +</Project> diff --git a/vcpkg/scripts/buildsystems/osx/applocal.py b/vcpkg/scripts/buildsystems/osx/applocal.py new file mode 100644 index 0000000..5237f1f --- /dev/null +++ b/vcpkg/scripts/buildsystems/osx/applocal.py @@ -0,0 +1,425 @@ +#!/usr/bin/env python2 +# -*- coding: utf-8 -*- +""" +finish the job started by macdeployqtfix +from: https://github.com/arl/macdeployqtfix + +The MIT License (MIT) + +Copyright (c) 2015 Aurelien Rainone + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +""" + +from subprocess import Popen, PIPE +from string import Template +import os +import sys +import logging +import argparse +import re +from collections import namedtuple + + +QTLIB_NAME_REGEX = r'^(?:@executable_path)?/.*/(Qt[a-zA-Z]*).framework/(?:Versions/\d/)?\1$' +QTLIB_NORMALIZED = r'$prefix/Frameworks/$qtlib.framework/Versions/$qtversion/$qtlib' + +QTPLUGIN_NAME_REGEX = r'^(?:@executable_path)?/.*/[pP]lug[iI]ns/(.*)/(.*).dylib$' +QTPLUGIN_NORMALIZED = r'$prefix/PlugIns/$plugintype/$pluginname.dylib' + +LOADERPATH_REGEX = r'^@[a-z_]+path/(.*)' +LOADERPATH_NORMALIZED = r'$prefix/Frameworks/$loaderpathlib' + + +class GlobalConfig(object): + logger = None + qtpath = None + exepath = None + + +def run_and_get_output(popen_args): + """Run process and get all output""" + process_output = namedtuple('ProcessOutput', ['stdout', 'stderr', 'retcode']) + try: + GlobalConfig.logger.debug('run_and_get_output({0})'.format(repr(popen_args))) + + proc = Popen(popen_args, stdin=PIPE, stdout=PIPE, stderr=PIPE) + stdout, stderr = proc.communicate(b'') + proc_out = process_output(stdout, stderr, proc.returncode) + + GlobalConfig.logger.debug('\tprocess_output: {0}'.format(proc_out)) + return proc_out + except Exception as exc: + GlobalConfig.logger.error('\texception: {0}'.format(exc)) + return process_output('', exc.message, -1) + + +def get_dependencies(filename): + """ + input: filename must be an absolute path + Should call `otool` and returns the list of dependencies, unsorted, + unmodified, just the raw list so then we could eventually re-use in other + more specialized functions + """ + GlobalConfig.logger.debug('get_dependencies({0})'.format(filename)) + popen_args = ['otool', '-L', filename] + proc_out = run_and_get_output(popen_args) + deps = [] + if proc_out.retcode == 0: + # some string splitting + deps = [s.strip().split(b' ')[0].decode('utf-8') for s in proc_out.stdout.splitlines()[1:] if s] + # prevent infinite recursion when a binary depends on itself (seen with QtWidgets)... + deps = [s for s in deps if os.path.basename(filename) not in s] + return deps + + +def is_qt_plugin(filename): + """ + Checks if a given file is a qt plugin. + Accepts absolute path as well as path containing @executable_path + """ + qtlib_name_rgx = re.compile(QTPLUGIN_NAME_REGEX) + return qtlib_name_rgx.match(filename) is not None + + +def is_qt_lib(filename): + """ + Checks if a given file is a qt library. + Accepts absolute path as well as path containing @executable_path + """ + qtlib_name_rgx = re.compile(QTLIB_NAME_REGEX) + return qtlib_name_rgx.match(filename) is not None + + +def is_loader_path_lib(filename): + """ + Checks if a given file is loaded via @loader_path or @rpath + """ + qtlib_name_rgx = re.compile(LOADERPATH_REGEX) + return qtlib_name_rgx.match(filename) is not None + + +def normalize_qtplugin_name(filename): + """ + input: a path to a qt plugin, as returned by otool, that can have this form : + - an absolute path /../plugins/PLUGINTYPE/PLUGINNAME.dylib + - @executable_path/../plugins/PLUGINTYPE/PLUGINNAME.dylib + output: + a tuple (qtlib, abspath, rpath) where: + - qtname is the name of the plugin (libqcocoa.dylib, etc.) + - abspath is the absolute path of the qt lib inside the app bundle of exepath + - relpath is the correct rpath to a qt lib inside the app bundle + """ + + GlobalConfig.logger.debug('normalize_plugin_name({0})'.format(filename)) + + qtplugin_name_rgx = re.compile(QTPLUGIN_NAME_REGEX) + rgxret = qtplugin_name_rgx.match(filename) + if not rgxret: + msg = 'couldn\'t normalize a non-qt plugin filename: {0}'.format(filename) + GlobalConfig.logger.critical(msg) + raise Exception(msg) + + # qtplugin normalization settings + qtplugintype = rgxret.groups()[0] + qtpluginname = rgxret.groups()[1] + + templ = Template(QTPLUGIN_NORMALIZED) + + # from qtlib, forge 2 path : + # - absolute path of qt lib in bundle, + abspath = os.path.normpath(templ.safe_substitute( + prefix=os.path.dirname(GlobalConfig.exepath) + '/..', + plugintype=qtplugintype, + pluginname=qtpluginname)) + + # - and rpath containing @executable_path, relative to exepath + rpath = templ.safe_substitute( + prefix='@executable_path/..', + plugintype=qtplugintype, + pluginname=qtpluginname) + + GlobalConfig.logger.debug('\treturns({0})'.format((qtpluginname, abspath, rpath))) + return qtpluginname, abspath, rpath + + +def normalize_qtlib_name(filename): + """ + input: a path to a qt library, as returned by otool, that can have this form : + - an absolute path /lib/xxx/yyy + - @executable_path/../Frameworks/QtSerialPort.framework/Versions/5/QtSerialPort + output: + a tuple (qtlib, abspath, rpath) where: + - qtlib is the name of the qtlib (QtCore, QtWidgets, etc.) + - abspath is the absolute path of the qt lib inside the app bundle of exepath + - relpath is the correct rpath to a qt lib inside the app bundle + """ + GlobalConfig.logger.debug('normalize_qtlib_name({0})'.format(filename)) + + qtlib_name_rgx = re.compile(QTLIB_NAME_REGEX) + rgxret = qtlib_name_rgx.match(filename) + if not rgxret: + msg = 'couldn\'t normalize a non-qt lib filename: {0}'.format(filename) + GlobalConfig.logger.critical(msg) + raise Exception(msg) + + # qtlib normalization settings + qtlib = rgxret.groups()[0] + qtversion = 5 + + templ = Template(QTLIB_NORMALIZED) + + # from qtlib, forge 2 path : + # - absolute path of qt lib in bundle, + abspath = os.path.normpath(templ.safe_substitute( + prefix=os.path.dirname(GlobalConfig.exepath) + '/..', + qtlib=qtlib, + qtversion=qtversion)) + + # - and rpath containing @executable_path, relative to exepath + rpath = templ.safe_substitute( + prefix='@executable_path/..', + qtlib=qtlib, + qtversion=qtversion) + + GlobalConfig.logger.debug('\treturns({0})'.format((qtlib, abspath, rpath))) + return qtlib, abspath, rpath + + +def normalize_loaderpath_name(filename): + """ + input: a path to a loaderpath library, as returned by otool, that can have this form : + - an relative path @loaderpath/yyy + output: + a tuple (loaderpathlib, abspath, rpath) where: + - loaderpathlib is the name of the loaderpath lib + - abspath is the absolute path of the qt lib inside the app bundle of exepath + - relpath is the correct rpath to a qt lib inside the app bundle + """ + GlobalConfig.logger.debug('normalize_loaderpath_name({0})'.format(filename)) + + loaderpath_name_rgx = re.compile(LOADERPATH_REGEX) + rgxret = loaderpath_name_rgx.match(filename) + if not rgxret: + msg = 'couldn\'t normalize a loaderpath lib filename: {0}'.format(filename) + GlobalConfig.logger.critical(msg) + raise Exception(msg) + + # loaderpath normalization settings + loaderpathlib = rgxret.groups()[0] + templ = Template(LOADERPATH_NORMALIZED) + + # from loaderpath, forge 2 path : + # - absolute path of qt lib in bundle, + abspath = os.path.normpath(templ.safe_substitute( + prefix=os.path.dirname(GlobalConfig.exepath) + '/..', + loaderpathlib=loaderpathlib)) + + # - and rpath containing @executable_path, relative to exepath + rpath = templ.safe_substitute( + prefix='@executable_path/..', + loaderpathlib=loaderpathlib) + + GlobalConfig.logger.debug('\treturns({0})'.format((loaderpathlib, abspath, rpath))) + return loaderpathlib, abspath, rpath + + +def fix_dependency(binary, dep): + """ + fix 'dep' dependency of 'binary'. 'dep' is a qt library + """ + if is_qt_lib(dep): + qtname, dep_abspath, dep_rpath = normalize_qtlib_name(dep) + qtnamesrc = os.path.join(GlobalConfig.qtpath, 'lib', '{0}.framework'. + format(qtname), qtname) + elif is_qt_plugin(dep): + qtname, dep_abspath, dep_rpath = normalize_qtplugin_name(dep) + qtnamesrc = os.path.join(GlobalConfig.qtpath, 'lib', '{0}.framework'. + format(qtname), qtname) + elif is_loader_path_lib(dep): + qtname, dep_abspath, dep_rpath = normalize_loaderpath_name(dep) + qtnamesrc = os.path.join(GlobalConfig.qtpath + '/lib', qtname) + else: + return True + + # if the source path doesn't exist it's probably not a dependency + # originating with vcpkg and we should leave it alone + if not os.path.exists(qtnamesrc): + return True + + dep_ok = True + # check that rpath of 'dep' inside binary has been correctly set + # (ie: relative to exepath using '@executable_path' syntax) + if dep != dep_rpath: + # dep rpath is not ok + GlobalConfig.logger.info('changing rpath \'{0}\' in binary {1}'.format(dep, binary)) + + # call install_name_tool -change on binary + popen_args = ['install_name_tool', '-change', dep, dep_rpath, binary] + proc_out = run_and_get_output(popen_args) + if proc_out.retcode != 0: + GlobalConfig.logger.error(proc_out.stderr) + dep_ok = False + else: + # call install_name_tool -id on binary + popen_args = ['install_name_tool', '-id', dep_rpath, binary] + proc_out = run_and_get_output(popen_args) + if proc_out.retcode != 0: + GlobalConfig.logger.error(proc_out.stderr) + dep_ok = False + + # now ensure that 'dep' exists at the specified path, relative to bundle + if dep_ok and not os.path.exists(dep_abspath): + + # ensure destination directory exists + GlobalConfig.logger.info('ensuring directory \'{0}\' exists: {0}'. + format(os.path.dirname(dep_abspath))) + popen_args = ['mkdir', '-p', os.path.dirname(dep_abspath)] + proc_out = run_and_get_output(popen_args) + if proc_out.retcode != 0: + GlobalConfig.logger.info(proc_out.stderr) + dep_ok = False + else: + # copy missing dependency into bundle + GlobalConfig.logger.info('copying missing dependency in bundle: {0}'. + format(qtname)) + popen_args = ['cp', qtnamesrc, dep_abspath] + proc_out = run_and_get_output(popen_args) + if proc_out.retcode != 0: + GlobalConfig.logger.info(proc_out.stderr) + dep_ok = False + else: + # ensure permissions are correct if we ever have to change its rpath + GlobalConfig.logger.info('ensuring 755 perm to {0}'.format(dep_abspath)) + popen_args = ['chmod', '755', dep_abspath] + proc_out = run_and_get_output(popen_args) + if proc_out.retcode != 0: + GlobalConfig.logger.info(proc_out.stderr) + dep_ok = False + else: + GlobalConfig.logger.debug('{0} is at correct location in bundle'.format(qtname)) + + if dep_ok: + return fix_binary(dep_abspath) + return False + + +def fix_binary(binary): + """ + input: + binary: relative or absolute path (no @executable_path syntax) + process: + - first fix the rpath for the qt libs on which 'binary' depend + - copy into the bundle of exepath the eventual libraries that are missing + - (create the soft links) needed ? + - do the same for all qt dependencies of binary (recursive) + """ + GlobalConfig.logger.debug('fix_binary({0})'.format(binary)) + + # loop on 'binary' dependencies + for dep in get_dependencies(binary): + if not fix_dependency(binary, dep): + GlobalConfig.logger.error('quitting early: couldn\'t fix dependency {0} of {1}'.format(dep, binary)) + return False + return True + + +def fix_main_binaries(): + """ + list the main binaries of the app bundle and fix them + """ + # deduce bundle path + bundlepath = os.path.sep.join(GlobalConfig.exepath.split(os.path.sep)[0:-3]) + + # fix main binary + GlobalConfig.logger.info('fixing executable \'{0}\''.format(GlobalConfig.exepath)) + if fix_binary(GlobalConfig.exepath): + GlobalConfig.logger.info('fixing plugins') + for root, dummy, files in os.walk(bundlepath): + for name in [f for f in files if os.path.splitext(f)[1] == '.dylib']: + GlobalConfig.logger.info('fixing plugin {0}'.format(name)) + if not fix_binary(os.path.join(root, name)): + return False + return True + + +def main(): + descr = """finish the job started by macdeployqt! + - find dependencies/rpaths with otool + - copy missed dependencies with cp and mkdir + - fix missed rpaths with install_name_tool + + exit codes: + - 0 : success + - 1 : error + """ + + parser = argparse.ArgumentParser(description=descr, + formatter_class=argparse.RawTextHelpFormatter) + parser.add_argument('exepath', + help='path to the binary depending on Qt') + parser.add_argument('qtpath', + help='path of Qt libraries used to build the Qt application') + parser.add_argument('-q', '--quiet', action='store_true', default=False, + help='do not create log on standard output') + parser.add_argument('-nl', '--no-log-file', action='store_true', default=False, + help='do not create log file \'./macdeployqtfix.log\'') + parser.add_argument('-v', '--verbose', action='store_true', default=False, + help='produce more log messages(debug log)') + args = parser.parse_args() + + # globals + GlobalConfig.qtpath = os.path.normpath(args.qtpath) + GlobalConfig.exepath = args.exepath + GlobalConfig.logger = logging.getLogger() + + # configure logging + ################### + + # create formatter + formatter = logging.Formatter('%(levelname)s | %(message)s') + # create console GlobalConfig.logger + if not args.quiet: + chdlr = logging.StreamHandler(sys.stdout) + chdlr.setFormatter(formatter) + GlobalConfig.logger.addHandler(chdlr) + + # create file GlobalConfig.logger + if not args.no_log_file: + fhdlr = logging.FileHandler('./macdeployqtfix.log', mode='w') + fhdlr.setFormatter(formatter) + GlobalConfig.logger.addHandler(fhdlr) + + if args.no_log_file and args.quiet: + GlobalConfig.logger.addHandler(logging.NullHandler()) + else: + GlobalConfig.logger.setLevel(logging.DEBUG if args.verbose else logging.INFO) + + if fix_main_binaries(): + GlobalConfig.logger.info('macdeployqtfix terminated with success') + ret = 0 + else: + GlobalConfig.logger.error('macdeployqtfix terminated with error') + ret = 1 + sys.exit(ret) + + +if __name__ == "__main__": + main() diff --git a/vcpkg/scripts/buildsystems/vcpkg.cmake b/vcpkg/scripts/buildsystems/vcpkg.cmake new file mode 100644 index 0000000..38f87f9 --- /dev/null +++ b/vcpkg/scripts/buildsystems/vcpkg.cmake @@ -0,0 +1,952 @@ +# Mark variables as used so cmake doesn't complain about them +mark_as_advanced(CMAKE_TOOLCHAIN_FILE) + +# NOTE: to figure out what cmake versions are required for different things, +# grep for `CMake 3`. All version requirement comments should follow that format. + +# Attention: Changes to this file do not affect ABI hashing. + +#[===[.md: +# z_vcpkg_add_fatal_error +Add a fatal error. + +```cmake +z_vcpkg_add_fatal_error(<message>...) +``` + +We use this system, instead of `message(FATAL_ERROR)`, +since cmake prints a lot of nonsense if the toolchain errors out before it's found the build tools. + +This `Z_VCPKG_HAS_FATAL_ERROR` must be checked before any filesystem operations are done, +since otherwise you might be doing something with bad variables set up. +#]===] +# this is defined above everything else so that it can be used. +set(Z_VCPKG_FATAL_ERROR) +set(Z_VCPKG_HAS_FATAL_ERROR OFF) +function(z_vcpkg_add_fatal_error ERROR) + if(NOT Z_VCPKG_HAS_FATAL_ERROR) + set(Z_VCPKG_HAS_FATAL_ERROR ON PARENT_SCOPE) + set(Z_VCPKG_FATAL_ERROR "${ERROR}" PARENT_SCOPE) + else() + string(APPEND Z_VCPKG_FATAL_ERROR "\n${ERROR}") + endif() +endfunction() + +set(Z_VCPKG_CMAKE_REQUIRED_MINIMUM_VERSION "3.7.2") +if(CMAKE_VERSION VERSION_LESS Z_VCPKG_CMAKE_REQUIRED_MINIMUM_VERSION) + message(FATAL_ERROR "vcpkg.cmake requires at least CMake ${Z_VCPKG_CMAKE_REQUIRED_MINIMUM_VERSION}.") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 3.16) + +include(CMakeDependentOption) + +# VCPKG toolchain options. +option(VCPKG_VERBOSE "Enables messages from the VCPKG toolchain for debugging purposes." OFF) +mark_as_advanced(VCPKG_VERBOSE) + +option(VCPKG_APPLOCAL_DEPS "Automatically copy dependencies into the output directory for executables." ON) +option(X_VCPKG_APPLOCAL_DEPS_SERIALIZED "(experimental) Add USES_TERMINAL to VCPKG_APPLOCAL_DEPS to force serialization." OFF) + +# requires CMake 3.14 +option(X_VCPKG_APPLOCAL_DEPS_INSTALL "(experimental) Automatically copy dependencies into the install target directory for executables. Requires CMake 3.14." OFF) +option(VCPKG_PREFER_SYSTEM_LIBS "Appends the vcpkg paths to CMAKE_PREFIX_PATH, CMAKE_LIBRARY_PATH and CMAKE_FIND_ROOT_PATH so that vcpkg libraries/packages are found after toolchain/system libraries/packages." OFF) +if(VCPKG_PREFER_SYSTEM_LIBS) + message(WARNING "VCPKG_PREFER_SYSTEM_LIBS has been deprecated. Use empty overlay ports instead.") +endif() + +# Manifest options and settings +set(Z_VCPKG_MANIFEST_DIR_INITIAL_VALUE "${VCPKG_MANIFEST_DIR}") +if(NOT DEFINED VCPKG_MANIFEST_DIR) + if(EXISTS "${CMAKE_SOURCE_DIR}/vcpkg.json") + set(Z_VCPKG_MANIFEST_DIR_INITIAL_VALUE "${CMAKE_SOURCE_DIR}") + endif() +endif() +set(VCPKG_MANIFEST_DIR "${Z_VCPKG_MANIFEST_DIR_INITIAL_VALUE}" + CACHE PATH "The path to the vcpkg manifest directory." FORCE) + +if(DEFINED VCPKG_MANIFEST_DIR AND NOT VCPKG_MANIFEST_DIR STREQUAL "") + set(Z_VCPKG_HAS_MANIFEST_DIR ON) +else() + set(Z_VCPKG_HAS_MANIFEST_DIR OFF) +endif() + +option(VCPKG_MANIFEST_MODE "Use manifest mode, as opposed to classic mode." "${Z_VCPKG_HAS_MANIFEST_DIR}") + +if(VCPKG_MANIFEST_MODE AND NOT Z_VCPKG_HAS_MANIFEST_DIR) + z_vcpkg_add_fatal_error( +"vcpkg manifest mode was enabled, but we couldn't find a manifest file (vcpkg.json) +in the current source directory (${CMAKE_CURRENT_SOURCE_DIR}). +Please add a manifest, or disable manifests by turning off VCPKG_MANIFEST_MODE." + ) +endif() + +if(NOT DEFINED CACHE{Z_VCPKG_CHECK_MANIFEST_MODE}) + set(Z_VCPKG_CHECK_MANIFEST_MODE "${VCPKG_MANIFEST_MODE}" + CACHE INTERNAL "Making sure VCPKG_MANIFEST_MODE doesn't change") +endif() + +if(NOT VCPKG_MANIFEST_MODE AND Z_VCPKG_CHECK_MANIFEST_MODE) + z_vcpkg_add_fatal_error([[ +vcpkg manifest mode was disabled for a build directory where it was initially enabled. +This is not supported. Please delete the build directory and reconfigure. +]]) +elseif(VCPKG_MANIFEST_MODE AND NOT Z_VCPKG_CHECK_MANIFEST_MODE) + z_vcpkg_add_fatal_error([[ +vcpkg manifest mode was enabled for a build directory where it was initially disabled. +This is not supported. Please delete the build directory and reconfigure. +]]) +endif() + +CMAKE_DEPENDENT_OPTION(VCPKG_MANIFEST_INSTALL [[ +Install the dependencies listed in your manifest: + If this is off, you will have to manually install your dependencies. + See https://github.com/microsoft/vcpkg/tree/master/docs/specifications/manifests.md for more info. +]] + ON + "VCPKG_MANIFEST_MODE" + OFF) + +if(VCPKG_MANIFEST_INSTALL) + set(VCPKG_BOOTSTRAP_OPTIONS "${VCPKG_BOOTSTRAP_OPTIONS}" CACHE STRING "Additional options to bootstrap vcpkg" FORCE) + set(VCPKG_OVERLAY_PORTS "${VCPKG_OVERLAY_PORTS}" CACHE STRING "Overlay ports to use for vcpkg install in manifest mode" FORCE) + set(VCPKG_OVERLAY_TRIPLETS "${VCPKG_OVERLAY_TRIPLETS}" CACHE STRING "Overlay triplets to use for vcpkg install in manifest mode" FORCE) + set(VCPKG_INSTALL_OPTIONS "${VCPKG_INSTALL_OPTIONS}" CACHE STRING "Additional install options to pass to vcpkg" FORCE) + set(Z_VCPKG_UNUSED VCPKG_BOOTSTRAP_OPTIONS) + set(Z_VCPKG_UNUSED VCPKG_OVERLAY_PORTS) + set(Z_VCPKG_UNUSED VCPKG_OVERLAY_TRIPLETS) + set(Z_VCPKG_UNUSED VCPKG_INSTALL_OPTIONS) +endif() + +# CMake helper utilities + +#[===[.md: +# z_vcpkg_function_arguments + +Get a list of the arguments which were passed in. +Unlike `ARGV`, which is simply the arguments joined with `;`, +so that `(A B)` is not distinguishable from `("A;B")`, +this macro gives `"A;B"` for the first argument list, +and `"A\;B"` for the second. + +```cmake +z_vcpkg_function_arguments(<out-var> [<N>]) +``` + +`z_vcpkg_function_arguments` gets the arguments between `ARGV<N>` and the last argument. +`<N>` defaults to `0`, so that all arguments are taken. + +## Example: +```cmake +function(foo_replacement) + z_vcpkg_function_arguments(ARGS) + foo(${ARGS}) + ... +endfunction() +``` +#]===] + +# NOTE: this function definition is copied directly from scripts/cmake/z_vcpkg_function_arguments.cmake +# do not make changes here without making the same change there. +macro(z_vcpkg_function_arguments OUT_VAR) + if("${ARGC}" EQUAL "1") + set(z_vcpkg_function_arguments_FIRST_ARG "0") + elseif("${ARGC}" EQUAL "2") + set(z_vcpkg_function_arguments_FIRST_ARG "${ARGV1}") + else() + # vcpkg bug + message(FATAL_ERROR "z_vcpkg_function_arguments: invalid arguments (${ARGV})") + endif() + + set("${OUT_VAR}" "") + + # this allows us to get the value of the enclosing function's ARGC + set(z_vcpkg_function_arguments_ARGC_NAME "ARGC") + set(z_vcpkg_function_arguments_ARGC "${${z_vcpkg_function_arguments_ARGC_NAME}}") + + math(EXPR z_vcpkg_function_arguments_LAST_ARG "${z_vcpkg_function_arguments_ARGC} - 1") + if(z_vcpkg_function_arguments_LAST_ARG GREATER_EQUAL z_vcpkg_function_arguments_FIRST_ARG) + foreach(z_vcpkg_function_arguments_N RANGE "${z_vcpkg_function_arguments_FIRST_ARG}" "${z_vcpkg_function_arguments_LAST_ARG}") + string(REPLACE ";" "\\;" z_vcpkg_function_arguments_ESCAPED_ARG "${ARGV${z_vcpkg_function_arguments_N}}") + # adds an extra `;` on the first time through + set("${OUT_VAR}" "${${OUT_VAR}};${z_vcpkg_function_arguments_ESCAPED_ARG}") + endforeach() + # remove leading `;` + string(SUBSTRING "${${OUT_VAR}}" "1" "-1" "${OUT_VAR}") + endif() +endmacro() + +#[===[.md: +# z_vcpkg_set_powershell_path + +Gets either the path to powershell or powershell core, +and places it in the variable Z_VCPKG_POWERSHELL_PATH. +#]===] +function(z_vcpkg_set_powershell_path) + # Attempt to use pwsh if it is present; otherwise use powershell + if(NOT DEFINED Z_VCPKG_POWERSHELL_PATH) + find_program(Z_VCPKG_PWSH_PATH pwsh) + if(Z_VCPKG_PWSH_PATH) + set(Z_VCPKG_POWERSHELL_PATH "${Z_VCPKG_PWSH_PATH}" CACHE INTERNAL "The path to the PowerShell implementation to use.") + else() + message(DEBUG "vcpkg: Could not find PowerShell Core; falling back to PowerShell") + find_program(Z_VCPKG_BUILTIN_POWERSHELL_PATH powershell) + if(Z_VCPKG_BUILTIN_POWERSHELL_PATH) + set(Z_VCPKG_POWERSHELL_PATH "${Z_VCPKG_BUILTIN_POWERSHELL_PATH}" CACHE INTERNAL "The path to the PowerShell implementation to use.") + else() + message(WARNING "vcpkg: Could not find PowerShell; using static string 'powershell.exe'") + set(Z_VCPKG_POWERSHELL_PATH "powershell.exe" CACHE INTERNAL "The path to the PowerShell implementation to use.") + endif() + endif() + endif() # Z_VCPKG_POWERSHELL_PATH +endfunction() + + +# Determine whether the toolchain is loaded during a try-compile configuration +get_property(Z_VCPKG_CMAKE_IN_TRY_COMPILE GLOBAL PROPERTY IN_TRY_COMPILE) + +if(VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + include("${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}") +endif() + +if(VCPKG_TOOLCHAIN) + cmake_policy(POP) + return() +endif() + +#If CMake does not have a mapping for MinSizeRel and RelWithDebInfo in imported targets +#it will map those configuration to the first valid configuration in CMAKE_CONFIGURATION_TYPES or the targets IMPORTED_CONFIGURATIONS. +#In most cases this is the debug configuration which is wrong. +if(NOT DEFINED CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL) + set(CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL "MinSizeRel;Release;None;") + if(VCPKG_VERBOSE) + message(STATUS "VCPKG-Info: CMAKE_MAP_IMPORTED_CONFIG_MINSIZEREL set to MinSizeRel;Release;None;") + endif() +endif() +if(NOT DEFINED CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO) + set(CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO "RelWithDebInfo;Release;None;") + if(VCPKG_VERBOSE) + message(STATUS "VCPKG-Info: CMAKE_MAP_IMPORTED_CONFIG_RELWITHDEBINFO set to RelWithDebInfo;Release;None;") + endif() +endif() + +if(VCPKG_TARGET_TRIPLET) + # This is required since a user might do: 'set(VCPKG_TARGET_TRIPLET somevalue)' [no CACHE] before the first project() call + # Latter within the toolchain file we do: 'set(VCPKG_TARGET_TRIPLET somevalue CACHE STRING "")' which + # will otherwise override the user setting of VCPKG_TARGET_TRIPLET in the current scope of the toolchain since the CACHE value + # did not exist previously. Since the value is newly created CMake will use the CACHE value within this scope since it is the more + # recently created value in directory scope. This 'strange' behaviour only happens on the very first configure call since subsequent + # configure call will see the user value as the more recent value. The same logic must be applied to all cache values within this file! + # The FORCE keyword is required to ALWAYS lift the user provided/previously set value into a CACHE value. + set(VCPKG_TARGET_TRIPLET "${VCPKG_TARGET_TRIPLET}" CACHE STRING "Vcpkg target triplet (ex. x86-windows)" FORCE) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Ww][Ii][Nn]32$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x86) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Xx]64$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) +elseif(CMAKE_GENERATOR_PLATFORM MATCHES "^[Aa][Rr][Mm]64$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) +else() + if(CMAKE_GENERATOR STREQUAL "Visual Studio 14 2015 Win64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 14 2015 ARM") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 14 2015") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x86) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 15 2017 Win64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 15 2017 ARM") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 15 2017") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x86) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 16 2019" AND CMAKE_VS_PLATFORM_NAME_DEFAULT STREQUAL "ARM64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 16 2019") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 17 2022" AND CMAKE_VS_PLATFORM_NAME_DEFAULT STREQUAL "ARM64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) + elseif(CMAKE_GENERATOR STREQUAL "Visual Studio 17 2022") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin" AND DEFINED CMAKE_OSX_ARCHITECTURES) + list(LENGTH CMAKE_OSX_ARCHITECTURES Z_VCPKG_OSX_ARCH_COUNT) + if(Z_VCPKG_OSX_ARCH_COUNT EQUAL "0") + message(WARNING "Unable to determine target architecture. " + "Consider providing a value for the CMAKE_OSX_ARCHITECTURES cache variable. " + "Continuing without vcpkg.") + set(VCPKG_TOOLCHAIN ON) + cmake_policy(POP) + return() + endif() + + if(Z_VCPKG_OSX_ARCH_COUNT GREATER "1") + message(WARNING "Detected more than one target architecture. Using the first one.") + endif() + list(GET CMAKE_OSX_ARCHITECTURES "0" Z_VCPKG_OSX_TARGET_ARCH) + if(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "arm64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) + elseif(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "arm64s") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64s) + elseif(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "armv7s") + set(Z_VCPKG_TARGET_TRIPLET_ARCH armv7s) + elseif(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "armv7") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) + elseif(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "x86_64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(Z_VCPKG_OSX_TARGET_ARCH STREQUAL "i386") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x86) + else() + message(WARNING "Unable to determine target architecture, continuing without vcpkg.") + set(VCPKG_TOOLCHAIN ON) + cmake_policy(POP) + return() + endif() + else() + find_program(Z_VCPKG_CL cl) + if(Z_VCPKG_CL MATCHES "amd64/cl.exe$" OR Z_VCPKG_CL MATCHES "x64/cl.exe$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(Z_VCPKG_CL MATCHES "arm/cl.exe$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) + elseif(Z_VCPKG_CL MATCHES "arm64/cl.exe$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) + elseif(Z_VCPKG_CL MATCHES "bin/cl.exe$" OR Z_VCPKG_CL MATCHES "x86/cl.exe$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x86) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64" OR + CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64" OR + CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "amd64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH x64) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "s390x") + set(Z_VCPKG_TARGET_TRIPLET_ARCH s390x) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ppc64le") + set(Z_VCPKG_TARGET_TRIPLET_ARCH ppc64le) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv7l") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "^(aarch64|arm64|ARM64)$") + set(Z_VCPKG_TARGET_TRIPLET_ARCH arm64) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "riscv32") + set(Z_VCPKG_TARGET_TRIPLET_ARCH riscv32) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "riscv64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH riscv64) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "loongarch32") + set(Z_VCPKG_TARGET_TRIPLET_ARCH loongarch32) + elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "loongarch64") + set(Z_VCPKG_TARGET_TRIPLET_ARCH loongarch64) + else() + if(Z_VCPKG_CMAKE_IN_TRY_COMPILE) + message(STATUS "Unable to determine target architecture, continuing without vcpkg.") + else() + message(WARNING "Unable to determine target architecture, continuing without vcpkg.") + endif() + set(VCPKG_TOOLCHAIN ON) + cmake_policy(POP) + return() + endif() + endif() +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore" OR CMAKE_SYSTEM_NAME STREQUAL "WindowsPhone") + set(Z_VCPKG_TARGET_TRIPLET_PLAT uwp) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT linux) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT osx) +elseif(CMAKE_SYSTEM_NAME STREQUAL "iOS") + set(Z_VCPKG_TARGET_TRIPLET_PLAT ios) +elseif(CMAKE_SYSTEM_NAME STREQUAL "watchOS") + set(Z_VCPKG_TARGET_TRIPLET_PLAT watchos) +elseif(CMAKE_SYSTEM_NAME STREQUAL "tvOS") + set(Z_VCPKG_TARGET_TRIPLET_PLAT tvos) +elseif(CMAKE_SYSTEM_NAME STREQUAL "visionOS") + set(Z_VCPKG_TARGET_TRIPLET_PLAT visionos) +elseif(MINGW) + set(Z_VCPKG_TARGET_TRIPLET_PLAT mingw-dynamic) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")) + if(XBOX_CONSOLE_TARGET STREQUAL "scarlett") + set(Z_VCPKG_TARGET_TRIPLET_PLAT xbox-scarlett) + elseif(XBOX_CONSOLE_TARGET STREQUAL "xboxone") + set(Z_VCPKG_TARGET_TRIPLET_PLAT xbox-xboxone) + else() + set(Z_VCPKG_TARGET_TRIPLET_PLAT windows) + endif() +elseif(CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT freebsd) +elseif(CMAKE_SYSTEM_NAME STREQUAL "OpenBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT openbsd) +elseif(CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "NetBSD")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT netbsd) +elseif(CMAKE_SYSTEM_NAME STREQUAL "SunOS" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT solaris) +elseif(CMAKE_SYSTEM_NAME STREQUAL "Android" OR (NOT CMAKE_SYSTEM_NAME AND CMAKE_HOST_SYSTEM_NAME STREQUAL "Android")) + set(Z_VCPKG_TARGET_TRIPLET_PLAT android) +endif() + +if(EMSCRIPTEN) + set(Z_VCPKG_TARGET_TRIPLET_ARCH wasm32) + set(Z_VCPKG_TARGET_TRIPLET_PLAT emscripten) +endif() + +set(VCPKG_TARGET_TRIPLET "${Z_VCPKG_TARGET_TRIPLET_ARCH}-${Z_VCPKG_TARGET_TRIPLET_PLAT}" CACHE STRING "Vcpkg target triplet (ex. x86-windows)") +set(Z_VCPKG_TOOLCHAIN_DIR "${CMAKE_CURRENT_LIST_DIR}") + +# Detect .vcpkg-root to figure VCPKG_ROOT_DIR +set(Z_VCPKG_ROOT_DIR_CANDIDATE "${CMAKE_CURRENT_LIST_DIR}") +while(NOT DEFINED Z_VCPKG_ROOT_DIR) + if(EXISTS "${Z_VCPKG_ROOT_DIR_CANDIDATE}/.vcpkg-root") + set(Z_VCPKG_ROOT_DIR "${Z_VCPKG_ROOT_DIR_CANDIDATE}" CACHE INTERNAL "Vcpkg root directory") + elseif(IS_DIRECTORY "${Z_VCPKG_ROOT_DIR_CANDIDATE}") + get_filename_component(Z_VCPKG_ROOT_DIR_TEMP "${Z_VCPKG_ROOT_DIR_CANDIDATE}" DIRECTORY) + if(Z_VCPKG_ROOT_DIR_TEMP STREQUAL Z_VCPKG_ROOT_DIR_CANDIDATE) + break() # If unchanged, we have reached the root of the drive without finding vcpkg. + endif() + SET(Z_VCPKG_ROOT_DIR_CANDIDATE "${Z_VCPKG_ROOT_DIR_TEMP}") + unset(Z_VCPKG_ROOT_DIR_TEMP) + else() + break() + endif() +endwhile() +unset(Z_VCPKG_ROOT_DIR_CANDIDATE) + +if(NOT Z_VCPKG_ROOT_DIR) + z_vcpkg_add_fatal_error("Could not find .vcpkg-root") +endif() + +if(DEFINED VCPKG_INSTALLED_DIR) + set(Z_VCPKG_INSTALLED_DIR_INITIAL_VALUE "${VCPKG_INSTALLED_DIR}") +elseif(DEFINED _VCPKG_INSTALLED_DIR) + set(Z_VCPKG_INSTALLED_DIR_INITIAL_VALUE "${_VCPKG_INSTALLED_DIR}") +elseif(VCPKG_MANIFEST_MODE) + set(Z_VCPKG_INSTALLED_DIR_INITIAL_VALUE "${CMAKE_BINARY_DIR}/vcpkg_installed") +else() + set(Z_VCPKG_INSTALLED_DIR_INITIAL_VALUE "${Z_VCPKG_ROOT_DIR}/installed") +endif() + +set(VCPKG_INSTALLED_DIR "${Z_VCPKG_INSTALLED_DIR_INITIAL_VALUE}" + CACHE PATH + "The directory which contains the installed libraries for each triplet" FORCE) +set(_VCPKG_INSTALLED_DIR "${VCPKG_INSTALLED_DIR}" + CACHE PATH + "The directory which contains the installed libraries for each triplet" FORCE) + +function(z_vcpkg_add_vcpkg_to_cmake_path list suffix) + set(vcpkg_paths + "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}${suffix}" + "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug${suffix}" + ) + if(NOT DEFINED CMAKE_BUILD_TYPE OR CMAKE_BUILD_TYPE MATCHES "^[Dd][Ee][Bb][Uu][Gg]$") + list(REVERSE vcpkg_paths) # Debug build: Put Debug paths before Release paths. + endif() + if(VCPKG_PREFER_SYSTEM_LIBS) + list(APPEND "${list}" "${vcpkg_paths}") + else() + list(INSERT "${list}" "0" "${vcpkg_paths}") # CMake 3.15 is required for list(PREPEND ...). + endif() + set("${list}" "${${list}}" PARENT_SCOPE) +endfunction() +z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_PREFIX_PATH "") +z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_LIBRARY_PATH "/lib/manual-link") +z_vcpkg_add_vcpkg_to_cmake_path(CMAKE_FIND_ROOT_PATH "") + +if(NOT VCPKG_PREFER_SYSTEM_LIBS) + set(CMAKE_FIND_FRAMEWORK "LAST") # we assume that frameworks are usually system-wide libs, not vcpkg-built + set(CMAKE_FIND_APPBUNDLE "LAST") # we assume that appbundles are usually system-wide libs, not vcpkg-built +endif() + +# If one CMAKE_FIND_ROOT_PATH_MODE_* variables is set to ONLY, to make sure that ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET} +# and ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug are searched, it is not sufficient to just add them to CMAKE_FIND_ROOT_PATH, +# as CMAKE_FIND_ROOT_PATH specify "one or more directories to be prepended to all other search directories", so to make sure that +# the libraries are searched as they are, it is necessary to add "/" to the CMAKE_PREFIX_PATH +if(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE STREQUAL "ONLY" OR + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY STREQUAL "ONLY" OR + CMAKE_FIND_ROOT_PATH_MODE_PACKAGE STREQUAL "ONLY") + list(APPEND CMAKE_PREFIX_PATH "/") +endif() + +set(VCPKG_CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}") + +# CMAKE_EXECUTABLE_SUFFIX is not yet defined +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(Z_VCPKG_EXECUTABLE "${Z_VCPKG_ROOT_DIR}/vcpkg.exe") + set(Z_VCPKG_BOOTSTRAP_SCRIPT "${Z_VCPKG_ROOT_DIR}/bootstrap-vcpkg.bat") +else() + set(Z_VCPKG_EXECUTABLE "${Z_VCPKG_ROOT_DIR}/vcpkg") + set(Z_VCPKG_BOOTSTRAP_SCRIPT "${Z_VCPKG_ROOT_DIR}/bootstrap-vcpkg.sh") +endif() + +if(VCPKG_MANIFEST_MODE AND VCPKG_MANIFEST_INSTALL AND NOT Z_VCPKG_CMAKE_IN_TRY_COMPILE AND NOT Z_VCPKG_HAS_FATAL_ERROR) + if(NOT EXISTS "${Z_VCPKG_EXECUTABLE}" AND NOT Z_VCPKG_HAS_FATAL_ERROR) + message(STATUS "Bootstrapping vcpkg before install") + + set(Z_VCPKG_BOOTSTRAP_LOG "${CMAKE_BINARY_DIR}/vcpkg-bootstrap.log") + file(TO_NATIVE_PATH "${Z_VCPKG_BOOTSTRAP_LOG}" Z_NATIVE_VCPKG_BOOTSTRAP_LOG) + execute_process( + COMMAND "${Z_VCPKG_BOOTSTRAP_SCRIPT}" ${VCPKG_BOOTSTRAP_OPTIONS} + OUTPUT_FILE "${Z_VCPKG_BOOTSTRAP_LOG}" + ERROR_FILE "${Z_VCPKG_BOOTSTRAP_LOG}" + RESULT_VARIABLE Z_VCPKG_BOOTSTRAP_RESULT) + + if(Z_VCPKG_BOOTSTRAP_RESULT EQUAL "0") + message(STATUS "Bootstrapping vcpkg before install - done") + else() + message(STATUS "Bootstrapping vcpkg before install - failed") + z_vcpkg_add_fatal_error("vcpkg install failed. See logs for more information: ${Z_NATIVE_VCPKG_BOOTSTRAP_LOG}") + endif() + endif() + + if(NOT Z_VCPKG_HAS_FATAL_ERROR) + message(STATUS "Running vcpkg install") + + set(Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS) + + if(DEFINED VCPKG_HOST_TRIPLET AND NOT VCPKG_HOST_TRIPLET STREQUAL "") + list(APPEND Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS "--host-triplet=${VCPKG_HOST_TRIPLET}") + endif() + + if(VCPKG_OVERLAY_PORTS) + foreach(Z_VCPKG_OVERLAY_PORT IN LISTS VCPKG_OVERLAY_PORTS) + list(APPEND Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS "--overlay-ports=${Z_VCPKG_OVERLAY_PORT}") + endforeach() + endif() + if(VCPKG_OVERLAY_TRIPLETS) + foreach(Z_VCPKG_OVERLAY_TRIPLET IN LISTS VCPKG_OVERLAY_TRIPLETS) + list(APPEND Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS "--overlay-triplets=${Z_VCPKG_OVERLAY_TRIPLET}") + endforeach() + endif() + + if(DEFINED VCPKG_FEATURE_FLAGS OR DEFINED CACHE{VCPKG_FEATURE_FLAGS}) + list(JOIN VCPKG_FEATURE_FLAGS "," Z_VCPKG_FEATURE_FLAGS) + set(Z_VCPKG_FEATURE_FLAGS "--feature-flags=${Z_VCPKG_FEATURE_FLAGS}") + endif() + + foreach(Z_VCPKG_FEATURE IN LISTS VCPKG_MANIFEST_FEATURES) + list(APPEND Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS "--x-feature=${Z_VCPKG_FEATURE}") + endforeach() + + if(VCPKG_MANIFEST_NO_DEFAULT_FEATURES) + list(APPEND Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS "--x-no-default-features") + endif() + + if(CMAKE_VERSION VERSION_GREATER_EQUAL "3.18") + set(Z_VCPKG_MANIFEST_INSTALL_ECHO_PARAMS ECHO_OUTPUT_VARIABLE ECHO_ERROR_VARIABLE) + else() + set(Z_VCPKG_MANIFEST_INSTALL_ECHO_PARAMS) + endif() + + execute_process( + COMMAND "${Z_VCPKG_EXECUTABLE}" install + --triplet "${VCPKG_TARGET_TRIPLET}" + --vcpkg-root "${Z_VCPKG_ROOT_DIR}" + "--x-wait-for-lock" + "--x-manifest-root=${VCPKG_MANIFEST_DIR}" + "--x-install-root=${_VCPKG_INSTALLED_DIR}" + ${Z_VCPKG_FEATURE_FLAGS} + ${Z_VCPKG_ADDITIONAL_MANIFEST_PARAMS} + ${VCPKG_INSTALL_OPTIONS} + OUTPUT_VARIABLE Z_VCPKG_MANIFEST_INSTALL_LOGTEXT + ERROR_VARIABLE Z_VCPKG_MANIFEST_INSTALL_LOGTEXT + RESULT_VARIABLE Z_VCPKG_MANIFEST_INSTALL_RESULT + ${Z_VCPKG_MANIFEST_INSTALL_ECHO_PARAMS} + ) + + set(Z_VCPKG_MANIFEST_INSTALL_LOGFILE "${CMAKE_BINARY_DIR}/vcpkg-manifest-install.log") + file(TO_NATIVE_PATH "${Z_VCPKG_MANIFEST_INSTALL_LOGFILE}" Z_NATIVE_VCPKG_MANIFEST_INSTALL_LOGFILE) + file(WRITE "${Z_VCPKG_MANIFEST_INSTALL_LOGFILE}" "${Z_VCPKG_MANIFEST_INSTALL_LOGTEXT}") + + if(Z_VCPKG_MANIFEST_INSTALL_RESULT EQUAL "0") + message(STATUS "Running vcpkg install - done") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + "${VCPKG_MANIFEST_DIR}/vcpkg.json") + if(EXISTS "${VCPKG_MANIFEST_DIR}/vcpkg-configuration.json") + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS + "${VCPKG_MANIFEST_DIR}/vcpkg-configuration.json") + endif() + else() + message(STATUS "Running vcpkg install - failed") + z_vcpkg_add_fatal_error("vcpkg install failed. See logs for more information: ${Z_NATIVE_VCPKG_MANIFEST_INSTALL_LOGFILE}") + endif() + endif() +endif() + +option(VCPKG_SETUP_CMAKE_PROGRAM_PATH "Enable the setup of CMAKE_PROGRAM_PATH to vcpkg paths" ON) +set(VCPKG_CAN_USE_HOST_TOOLS OFF) +if(DEFINED VCPKG_HOST_TRIPLET AND NOT VCPKG_HOST_TRIPLET STREQUAL "") + set(VCPKG_CAN_USE_HOST_TOOLS ON) +endif() +cmake_dependent_option(VCPKG_USE_HOST_TOOLS "Setup CMAKE_PROGRAM_PATH to use host tools" ON "VCPKG_CAN_USE_HOST_TOOLS" OFF) +unset(VCPKG_CAN_USE_HOST_TOOLS) + +if(VCPKG_SETUP_CMAKE_PROGRAM_PATH) + set(tools_base_path "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/tools") + if(VCPKG_USE_HOST_TOOLS) + set(tools_base_path "${VCPKG_INSTALLED_DIR}/${VCPKG_HOST_TRIPLET}/tools") + endif() + list(APPEND CMAKE_PROGRAM_PATH "${tools_base_path}") + file(GLOB Z_VCPKG_TOOLS_DIRS LIST_DIRECTORIES true "${tools_base_path}/*") + file(GLOB Z_VCPKG_TOOLS_FILES LIST_DIRECTORIES false "${tools_base_path}/*") + file(GLOB Z_VCPKG_TOOLS_DIRS_BIN LIST_DIRECTORIES true "${tools_base_path}/*/bin") + file(GLOB Z_VCPKG_TOOLS_FILES_BIN LIST_DIRECTORIES false "${tools_base_path}/*/bin") + list(REMOVE_ITEM Z_VCPKG_TOOLS_DIRS ${Z_VCPKG_TOOLS_FILES} "") # need at least one item for REMOVE_ITEM if CMake <= 3.19 + list(REMOVE_ITEM Z_VCPKG_TOOLS_DIRS_BIN ${Z_VCPKG_TOOLS_FILES_BIN} "") + string(REPLACE "/bin" "" Z_VCPKG_TOOLS_DIRS_TO_REMOVE "${Z_VCPKG_TOOLS_DIRS_BIN}") + list(REMOVE_ITEM Z_VCPKG_TOOLS_DIRS ${Z_VCPKG_TOOLS_DIRS_TO_REMOVE} "") + list(APPEND Z_VCPKG_TOOLS_DIRS ${Z_VCPKG_TOOLS_DIRS_BIN}) + foreach(Z_VCPKG_TOOLS_DIR IN LISTS Z_VCPKG_TOOLS_DIRS) + list(APPEND CMAKE_PROGRAM_PATH "${Z_VCPKG_TOOLS_DIR}") + endforeach() + unset(Z_VCPKG_TOOLS_DIR) + unset(Z_VCPKG_TOOLS_DIRS) + unset(Z_VCPKG_TOOLS_FILES) + unset(Z_VCPKG_TOOLS_DIRS_BIN) + unset(Z_VCPKG_TOOLS_FILES_BIN) + unset(Z_VCPKG_TOOLS_DIRS_TO_REMOVE) + unset(tools_base_path) +endif() + +cmake_policy(POP) + +function(add_executable) + z_vcpkg_function_arguments(ARGS) + _add_executable(${ARGS}) + set(target_name "${ARGV0}") + + list(FIND ARGV "IMPORTED" IMPORTED_IDX) + list(FIND ARGV "ALIAS" ALIAS_IDX) + list(FIND ARGV "MACOSX_BUNDLE" MACOSX_BUNDLE_IDX) + if(IMPORTED_IDX EQUAL "-1" AND ALIAS_IDX EQUAL "-1") + if(VCPKG_APPLOCAL_DEPS) + if(Z_VCPKG_TARGET_TRIPLET_PLAT MATCHES "windows|uwp|xbox") + z_vcpkg_set_powershell_path() + set(EXTRA_OPTIONS "") + if(X_VCPKG_APPLOCAL_DEPS_SERIALIZED) + set(EXTRA_OPTIONS USES_TERMINAL) + endif() + add_custom_command(TARGET "${target_name}" POST_BUILD + COMMAND "${Z_VCPKG_POWERSHELL_PATH}" -noprofile -executionpolicy Bypass -file "${Z_VCPKG_TOOLCHAIN_DIR}/msbuild/applocal.ps1" + -targetBinary "$<TARGET_FILE:${target_name}>" + -installedDir "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}$<$<CONFIG:Debug>:/debug>/bin" + -OutVariable out + VERBATIM + ${EXTRA_OPTIONS} + ) + elseif(Z_VCPKG_TARGET_TRIPLET_PLAT MATCHES "osx") + if(NOT MACOSX_BUNDLE_IDX EQUAL "-1") + find_package(Python COMPONENTS Interpreter) + add_custom_command(TARGET "${target_name}" POST_BUILD + COMMAND "${Python_EXECUTABLE}" "${Z_VCPKG_TOOLCHAIN_DIR}/osx/applocal.py" + "$<TARGET_FILE:${target_name}>" + "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}$<$<CONFIG:Debug>:/debug>" + VERBATIM + ) + endif() + endif() + endif() + set_target_properties("${target_name}" PROPERTIES VS_USER_PROPS do_not_import_user.props) + set_target_properties("${target_name}" PROPERTIES VS_GLOBAL_VcpkgEnabled false) + endif() +endfunction() + +function(add_library) + z_vcpkg_function_arguments(ARGS) + _add_library(${ARGS}) + set(target_name "${ARGV0}") + + list(FIND ARGS "IMPORTED" IMPORTED_IDX) + list(FIND ARGS "INTERFACE" INTERFACE_IDX) + list(FIND ARGS "ALIAS" ALIAS_IDX) + if(IMPORTED_IDX EQUAL "-1" AND INTERFACE_IDX EQUAL "-1" AND ALIAS_IDX EQUAL "-1") + get_target_property(IS_LIBRARY_SHARED "${target_name}" TYPE) + if(VCPKG_APPLOCAL_DEPS AND Z_VCPKG_TARGET_TRIPLET_PLAT MATCHES "windows|uwp|xbox" AND (IS_LIBRARY_SHARED STREQUAL "SHARED_LIBRARY" OR IS_LIBRARY_SHARED STREQUAL "MODULE_LIBRARY")) + z_vcpkg_set_powershell_path() + add_custom_command(TARGET "${target_name}" POST_BUILD + COMMAND "${Z_VCPKG_POWERSHELL_PATH}" -noprofile -executionpolicy Bypass -file "${Z_VCPKG_TOOLCHAIN_DIR}/msbuild/applocal.ps1" + -targetBinary "$<TARGET_FILE:${target_name}>" + -installedDir "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}$<$<CONFIG:Debug>:/debug>/bin" + -OutVariable out + VERBATIM + ) + endif() + set_target_properties("${target_name}" PROPERTIES VS_USER_PROPS do_not_import_user.props) + set_target_properties("${target_name}" PROPERTIES VS_GLOBAL_VcpkgEnabled false) + endif() +endfunction() + +# This is an experimental function to enable applocal install of dependencies as part of the `make install` process +# Arguments: +# TARGETS - a list of installed targets to have dependencies copied for +# DESTINATION - the runtime directory for those targets (usually `bin`) +# COMPONENT - the component this install command belongs to (optional) +# +# Note that this function requires CMake 3.14 for policy CMP0087 +function(x_vcpkg_install_local_dependencies) + if(CMAKE_VERSION VERSION_LESS "3.14") + message(FATAL_ERROR "x_vcpkg_install_local_dependencies and X_VCPKG_APPLOCAL_DEPS_INSTALL require at least CMake 3.14 +(current version: ${CMAKE_VERSION})" + ) + endif() + + cmake_parse_arguments(PARSE_ARGV "0" arg + "" + "DESTINATION;COMPONENT" + "TARGETS" + ) + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_DESTINATION) + message(FATAL_ERROR "DESTINATION must be specified") + endif() + + if(Z_VCPKG_TARGET_TRIPLET_PLAT MATCHES "^(windows|uwp|xbox-.*)$") + # Install CODE|SCRIPT allow the use of generator expressions + cmake_policy(SET CMP0087 NEW) # CMake 3.14 + + z_vcpkg_set_powershell_path() + if(NOT IS_ABSOLUTE "${arg_DESTINATION}") + set(arg_DESTINATION "\${CMAKE_INSTALL_PREFIX}/${arg_DESTINATION}") + endif() + + set(component_param "") + if(DEFINED arg_COMPONENT) + set(component_param COMPONENT "${arg_COMPONENT}") + endif() + + set(allowed_target_types MODULE_LIBRARY SHARED_LIBRARY EXECUTABLE) + foreach(target IN LISTS arg_TARGETS) + get_target_property(target_type "${target}" TYPE) + if(target_type IN_LIST allowed_target_types) + install(CODE "message(\"-- Installing app dependencies for ${target}...\") + execute_process(COMMAND \"${Z_VCPKG_POWERSHELL_PATH}\" -noprofile -executionpolicy Bypass -file \"${Z_VCPKG_TOOLCHAIN_DIR}/msbuild/applocal.ps1\" + -targetBinary \"${arg_DESTINATION}/$<TARGET_FILE_NAME:${target}>\" + -installedDir \"${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}$<$<CONFIG:Debug>:/debug>/bin\" + -OutVariable out)" + ${component_param} + ) + endif() + endforeach() + endif() +endfunction() + +if(X_VCPKG_APPLOCAL_DEPS_INSTALL) + function(install) + z_vcpkg_function_arguments(ARGS) + _install(${ARGS}) + + if(ARGV0 STREQUAL "TARGETS") + # Will contain the list of targets + set(parsed_targets "") + + # Destination - [RUNTIME] DESTINATION argument overrides this + set(destination "bin") + + set(component_param "") + + # Parse arguments given to the install function to find targets and (runtime) destination + set(modifier "") # Modifier for the command in the argument + set(last_command "") # Last command we found to process + foreach(arg IN LISTS ARGS) + if(arg MATCHES "^(ARCHIVE|LIBRARY|RUNTIME|OBJECTS|FRAMEWORK|BUNDLE|PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE|INCLUDES)$") + set(modifier "${arg}") + continue() + endif() + if(arg MATCHES "^(TARGETS|DESTINATION|PERMISSIONS|CONFIGURATIONS|COMPONENT|NAMELINK_COMPONENT|OPTIONAL|EXCLUDE_FROM_ALL|NAMELINK_ONLY|NAMELINK_SKIP|EXPORT|FILE_SET)$") + set(last_command "${arg}") + continue() + endif() + + if(last_command STREQUAL "TARGETS") + list(APPEND parsed_targets "${arg}") + endif() + + if(last_command STREQUAL "DESTINATION" AND (modifier STREQUAL "" OR modifier STREQUAL "RUNTIME")) + set(destination "${arg}") + endif() + if(last_command STREQUAL "COMPONENT" AND (modifier STREQUAL "" OR modifier STREQUAL "RUNTIME")) + set(component_param "COMPONENT" "${arg}") + endif() + endforeach() + + x_vcpkg_install_local_dependencies( + TARGETS ${parsed_targets} + DESTINATION "${destination}" + ${component_param} + ) + endif() + endfunction() +endif() + +option(VCPKG_TRACE_FIND_PACKAGE "Trace calls to find_package()" OFF) +if(NOT DEFINED VCPKG_OVERRIDE_FIND_PACKAGE_NAME) + set(VCPKG_OVERRIDE_FIND_PACKAGE_NAME find_package) +endif() +# NOTE: this is not a function, which means that arguments _are not_ perfectly forwarded +# this is fine for `find_package`, since there are no usecases for `;` in arguments, +# so perfect forwarding is not important +set(z_vcpkg_find_package_backup_id "0") +macro("${VCPKG_OVERRIDE_FIND_PACKAGE_NAME}" z_vcpkg_find_package_package_name) + if(VCPKG_TRACE_FIND_PACKAGE) + string(REPEAT " " "${z_vcpkg_find_package_backup_id}" z_vcpkg_find_package_indent) + string(JOIN " " z_vcpkg_find_package_argn ${ARGN}) + message(STATUS "${z_vcpkg_find_package_indent}find_package(${z_vcpkg_find_package_package_name} ${z_vcpkg_find_package_argn})") + unset(z_vcpkg_find_package_argn) + unset(z_vcpkg_find_package_indent) + endif() + + math(EXPR z_vcpkg_find_package_backup_id "${z_vcpkg_find_package_backup_id} + 1") + set(z_vcpkg_find_package_package_name "${z_vcpkg_find_package_package_name}") + set(z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN "${ARGN}") + set(z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars "") + + if(z_vcpkg_find_package_backup_id EQUAL "1") + # This is the top-level find_package call + if("${VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}}") + # Avoid CMake warning when both REQUIRED and CMAKE_REQUIRE_FIND_PACKAGE_<Pkg> are used + if(NOT "REQUIRED" IN_LIST "z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN") + list(APPEND "z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars" "CMAKE_REQUIRE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}") + if(DEFINED "CMAKE_REQUIRE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}") + set("z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_CMAKE_REQUIRE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}" "${CMAKE_REQUIRE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}}") + endif() + set("CMAKE_REQUIRE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}" 1) + endif() + if(VCPKG_TRACE_FIND_PACKAGE) + message(STATUS " (required by VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}=${VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}})") + endif() + elseif(DEFINED "VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}") + list(APPEND "z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars" "CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}") + if(DEFINED "CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}") + set("z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}" "${CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}}") + endif() + # We don't need to worry about clearing this for transitive users because + # once this top level find_package is disabled, we immediately will return + # not found and not try to visit transitive dependencies in the first place. + set("CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}" 1) + if(VCPKG_TRACE_FIND_PACKAGE) + message(STATUS " (disabled by VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}=${VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name}})") + endif() + elseif(VCPKG_TRACE_FIND_PACKAGE) + message(STATUS " (could be controlled by VCPKG_LOCK_FIND_PACKAGE_${z_vcpkg_find_package_package_name})") + endif() + endif() + + # Workaround to set the ROOT_PATH until upstream CMake stops overriding + # the ROOT_PATH at apple OS initialization phase. + # See https://gitlab.kitware.com/cmake/cmake/merge_requests/3273 + # Fixed in CMake 3.15 + if(CMAKE_SYSTEM_NAME STREQUAL "iOS" OR CMAKE_SYSTEM_NAME STREQUAL "watchOS" OR CMAKE_SYSTEM_NAME STREQUAL "tvOS" OR CMAKE_SYSTEM_NAME STREQUAL "visionOS") + list(APPEND z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars "CMAKE_FIND_ROOT_PATH") + if(DEFINED CMAKE_FIND_ROOT_PATH) + set(z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_CMAKE_FIND_ROOT_PATH "${CMAKE_FIND_ROOT_PATH}") + endif() + list(APPEND CMAKE_FIND_ROOT_PATH "${VCPKG_CMAKE_FIND_ROOT_PATH}") + endif() + + string(TOLOWER "${z_vcpkg_find_package_package_name}" z_vcpkg_find_package_lowercase_package_name) + set(z_vcpkg_find_package_vcpkg_cmake_wrapper_path + "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/${z_vcpkg_find_package_lowercase_package_name}/vcpkg-cmake-wrapper.cmake") + if(CMAKE_DISABLE_FIND_PACKAGE_${z_vcpkg_find_package_package_name}) + # Skip wrappers, fail if REQUIRED. + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + elseif(EXISTS "${z_vcpkg_find_package_vcpkg_cmake_wrapper_path}") + if(VCPKG_TRACE_FIND_PACKAGE) + string(REPEAT " " "${z_vcpkg_find_package_backup_id}" z_vcpkg_find_package_indent) + message(STATUS "${z_vcpkg_find_package_indent}using share/${z_vcpkg_find_package_lowercase_package_name}/vcpkg-cmake-wrapper.cmake") + unset(z_vcpkg_find_package_indent) + endif() + list(APPEND z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars "ARGS") + if(DEFINED ARGS) + set(z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_ARGS "${ARGS}") + endif() + set(ARGS "${z_vcpkg_find_package_package_name};${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}") + include("${z_vcpkg_find_package_vcpkg_cmake_wrapper_path}") + elseif(z_vcpkg_find_package_package_name STREQUAL "Boost" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/boost") + # Checking for the boost headers disables this wrapper unless the user has installed at least one boost library + # these intentionally are not backed up + set(Boost_USE_STATIC_LIBS OFF) + set(Boost_USE_MULTITHREADED ON) + set(Boost_NO_BOOST_CMAKE ON) + set(Boost_USE_STATIC_RUNTIME) + unset(Boost_USE_STATIC_RUNTIME CACHE) + if(CMAKE_VS_PLATFORM_TOOLSET STREQUAL "v120") + set(Boost_COMPILER "-vc120") + else() + set(Boost_COMPILER "-vc140") + endif() + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + elseif(z_vcpkg_find_package_package_name STREQUAL "ICU" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/unicode/utf.h") + list(FIND z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN "COMPONENTS" z_vcpkg_find_package_COMPONENTS_IDX) + if(NOT z_vcpkg_find_package_COMPONENTS_IDX EQUAL "-1") + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN} COMPONENTS data) + else() + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + endif() + elseif(z_vcpkg_find_package_package_name STREQUAL "GSL" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/gsl") + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + if(GSL_FOUND AND TARGET GSL::gsl) + set_property( TARGET GSL::gslcblas APPEND PROPERTY IMPORTED_CONFIGURATIONS Release ) + set_property( TARGET GSL::gsl APPEND PROPERTY IMPORTED_CONFIGURATIONS Release ) + if( EXISTS "${GSL_LIBRARY_DEBUG}" AND EXISTS "${GSL_CBLAS_LIBRARY_DEBUG}") + set_property( TARGET GSL::gsl APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug ) + set_target_properties( GSL::gsl PROPERTIES IMPORTED_LOCATION_DEBUG "${GSL_LIBRARY_DEBUG}" ) + set_property( TARGET GSL::gslcblas APPEND PROPERTY IMPORTED_CONFIGURATIONS Debug ) + set_target_properties( GSL::gslcblas PROPERTIES IMPORTED_LOCATION_DEBUG "${GSL_CBLAS_LIBRARY_DEBUG}" ) + endif() + endif() + elseif("${z_vcpkg_find_package_package_name}" STREQUAL "CURL" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/include/curl") + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + if(CURL_FOUND) + if(EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/nghttp2.lib") + list(APPEND CURL_LIBRARIES + "debug" "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/nghttp2.lib" + "optimized" "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/nghttp2.lib") + endif() + endif() + elseif("${z_vcpkg_find_package_lowercase_package_name}" STREQUAL "grpc" AND EXISTS "${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/share/grpc") + _find_package(gRPC ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + else() + _find_package("${z_vcpkg_find_package_package_name}" ${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_ARGN}) + endif() + # Do not use z_vcpkg_find_package_package_name beyond this point since it might have changed! + # Only variables using z_vcpkg_find_package_backup_id can used correctly below! + foreach(z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var IN LISTS z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_vars) + if(DEFINED z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var}) + set("${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var}" "${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var}}") + else() + unset("${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var}") + endif() + unset("z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_${z_vcpkg_find_package_${z_vcpkg_find_package_backup_id}_backup_var}") + endforeach() + math(EXPR z_vcpkg_find_package_backup_id "${z_vcpkg_find_package_backup_id} - 1") + if(z_vcpkg_find_package_backup_id LESS "0") + message(FATAL_ERROR "[vcpkg]: find_package ended with z_vcpkg_find_package_backup_id being less than 0! This is a logical error and should never happen. Please provide a cmake trace log via cmake cmd line option '--trace-expand'!") + endif() +endmacro() + +cmake_policy(PUSH) +cmake_policy(VERSION 3.16) + +set(VCPKG_TOOLCHAIN ON) +set(Z_VCPKG_UNUSED "${CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION}") +set(Z_VCPKG_UNUSED "${CMAKE_EXPORT_NO_PACKAGE_REGISTRY}") +set(Z_VCPKG_UNUSED "${CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY}") +set(Z_VCPKG_UNUSED "${CMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY}") +set(Z_VCPKG_UNUSED "${CMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP}") + +# Propagate these values to try-compile configurations so the triplet and toolchain load +if(NOT Z_VCPKG_CMAKE_IN_TRY_COMPILE) + list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES + VCPKG_TARGET_TRIPLET + VCPKG_TARGET_ARCHITECTURE + VCPKG_HOST_TRIPLET + VCPKG_INSTALLED_DIR + VCPKG_PREFER_SYSTEM_LIBS + # VCPKG_APPLOCAL_DEPS # This should be off within try_compile! + VCPKG_CHAINLOAD_TOOLCHAIN_FILE + Z_VCPKG_ROOT_DIR + ) +else() + set(VCPKG_APPLOCAL_DEPS OFF) +endif() + +if(Z_VCPKG_HAS_FATAL_ERROR) + message(FATAL_ERROR "${Z_VCPKG_FATAL_ERROR}") +endif() + +cmake_policy(POP) diff --git a/vcpkg/scripts/ci.baseline.txt b/vcpkg/scripts/ci.baseline.txt new file mode 100644 index 0000000..c30606a --- /dev/null +++ b/vcpkg/scripts/ci.baseline.txt @@ -0,0 +1,1166 @@ +########################################################################### +## This file defines the current expected build state of ports in CI. +## +## States +## <unspecified> (default) - +## If a port is missing from this file then it is assumed +## to build successfully if not blocked by a dependency. +## pass - The port must build successfully in the CI system. It is a hard +## error if the port build is blocked by a failed dependency. +## fail - The port build is expected to fail in the CI system. +## This is not necessarily the same as if a port is expected to build +## on a developers machine because it may fail due to the machine +## configuration. When set to fail the CI system will silently skip +## the port for pull request CI runs. But the CI system will still +## attempt to build the port in scheduled runs, reporting unexpected +## build success as a CI failure. +## skip - Do not build this port in the CI system. +## This is added to ports that may be flaky or conflict with other +## ports. Please comment for why a port is skipped so it can be +## removed when the issue is resolved. +## +## +## CI tested triplets: +## arm-neon-android +## arm64-android +## arm64-osx +## arm64-uwp +## arm64-windows +## arm64-windows-static-md +## x64-android +## x64-linux +## x64-osx +## x64-uwp +## x64-windows +## x64-windows-release +## x64-windows-static +## x64-windows-static-md +## x86-windows +## + +# Add new items alphabetically +apr:arm-neon-android=fail +apr:arm64-android=fail +apr:x64-android=fail +apsi:arm-neon-android=fail +apsi:x64-android=fail +arpack-ng:x64-windows-static-md=fail +arpack-ng:x64-windows-static=fail +# Broken with CUDA 12; needs update to 3.8.3 and https://github.com/arrayfire/arrayfire/issues/3349 fixed +arrayfire:x64-linux=fail +atliac-minitest:arm64-uwp=fail +atliac-minitest:x64-uwp=fail +avro-c:arm-neon-android=fail +avro-c:arm64-android=fail +avro-c:x64-android=fail +azure-storage-cpp:arm64-osx=fail +azure-storage-cpp:x64-linux=fail +azure-storage-cpp:x64-osx=fail +backward-cpp:arm-neon-android=fail +backward-cpp:arm64-android=fail +backward-cpp:x64-android=fail +# conflict https://github.com/microsoft/vcpkg/pull/32645 +bde:arm64-osx=skip +bde:x64-linux=skip +bde:x64-osx=skip +bde:x64-windows-release=skip +bde:x64-windows-static-md=skip +bde:x64-windows-static=skip +bde:x64-windows=skip +bde:x86-windows=skip +berkeleydb:arm-neon-android=fail +berkeleydb:arm64-android=fail +berkeleydb:x64-android=fail +binlog:arm-neon-android=fail +################################################################ +# <BLAS+LAPACK> +# These skips need to match the decision tree for which backends we use; see ports/blas/portfile.cmake +lapack-test:arm64-osx=pass # accelerate framework +lapack-test:arm64-uwp=pass # clapack +lapack-test:arm64-windows-static-md=pass # clapack +lapack-test:arm64-windows=pass # clapack +lapack-test:x64-linux=pass # lapack-reference[noblas] +lapack-test:x64-osx=pass # accelerate framework +lapack-test:x64-uwp=pass # clapack +lapack-test:x64-windows-release=pass # lapack-reference[noblas] +lapack-test:x64-windows-static-md=pass # lapack-reference[blas] +lapack-test:x64-windows-static=pass # lapack-reference[blas] +lapack-test:x64-windows=pass # lapack-reference[noblas] +lapack-test:x86-windows=pass # lapack-reference[noblas] +vcpkg-ci-blas:arm64-android=pass # openblas +vcpkg-ci-blas:arm64-osx=pass # accelerate framework +vcpkg-ci-blas:arm64-uwp=pass # openblas +vcpkg-ci-blas:arm64-windows-static-md=pass # openblas +vcpkg-ci-blas:arm64-windows=pass # openblas +vcpkg-ci-blas:x64-linux=pass # openblas +vcpkg-ci-blas:x64-osx=pass # accelerate framework +vcpkg-ci-blas:x64-uwp=pass # openblas +vcpkg-ci-blas:x64-windows-release=pass # openblas +vcpkg-ci-blas:x64-windows-static-md=pass # openblas +vcpkg-ci-blas:x64-windows-static=pass # openblas +vcpkg-ci-blas:x64-windows=pass # openblas +vcpkg-ci-blas:x86-windows=pass # openblas + +clapack:arm-neon-android=fail +clapack:arm64-android=fail +clapack:arm64-osx=skip +clapack:x64-android=fail +clapack:x64-linux=skip +clapack:x64-osx=skip +clapack:x64-windows-release=skip +clapack:x64-windows-static-md=pass +clapack:x64-windows-static=pass +clapack:x64-windows=skip +clapack:x86-windows=skip +cpprestsdk:arm-neon-android=fail # std::string issue, https://github.com/microsoft/vcpkg/pull/41293#issuecomment-2942853561 +cpprestsdk:arm64-android=fail +cpprestsdk:x64-android=fail +lapack-reference:arm-neon-android=fail +lapack-reference:arm64-android=fail +lapack-reference:arm64-osx=skip +lapack-reference:arm64-uwp=skip +lapack-reference:arm64-windows-static-md=skip +lapack-reference:arm64-windows=skip +lapack-reference:x64-android=fail +lapack-reference:x64-osx=skip +lapack-reference:x64-uwp=skip +lapack-reference:x64-windows-static-md=skip +lapack-reference:x64-windows-static=skip +#openblas:arm64-osx=skip +#openblas:x64-osx=skip +openblas:x64-windows-static-md=pass +openblas:x64-windows-static=pass +# </BLAS+LAPACK> +################################################################ +blitz:x64-android=fail +# Conflicts with openssl +boringssl:arm-neon-android=skip +boringssl:arm64-android=skip +boringssl:arm64-osx=skip +boringssl:arm64-uwp=skip +boringssl:arm64-windows-static-md=skip +boringssl:arm64-windows=skip +boringssl:x64-android=skip +boringssl:x64-linux=skip +boringssl:x64-osx=skip +boringssl:x64-uwp=skip +boringssl:x64-windows-release=skip +boringssl:x64-windows-static-md=skip +boringssl:x64-windows-static=skip +boringssl:x64-windows=skip +boringssl:x86-windows=skip +buck-yeh-bux:x64-uwp=skip +buck-yeh-bux:x86-windows=skip +caf:arm-neon-android=fail +caf:arm64-android=fail +caf:arm64-uwp=fail +caf:x64-android=fail +caf:x64-uwp=fail +casclib:arm64-uwp=fail +casclib:x64-uwp=fail +cctag:x64-windows-static-md=fail +cello:arm64-uwp=fail +cello:x64-uwp=fail +chakracore:x64-linux=skip +clamav:arm64-windows=fail +clblas:arm-neon-android=fail +clblas:arm64-android=fail +clblas:x64-android=fail +clockutils:arm-neon-android=fail # gnustl_shared is no longer supported. Please switch to either c++_shared or c++_static. +clockutils:arm64-android=fail +clockutils:x64-android=fail +clrng:arm-neon-android=fail +coin-or-ipopt:x64-windows-static-md=fail +coin-or-ipopt:x64-windows-static=fail +coroutine:arm-neon-android=fail +coroutine:arm64-android=fail +coroutine:arm64-osx=fail +coroutine:x64-android=fail +coroutine:x64-osx=fail +cpp-ipc:arm-neon-android=fail +cpp-ipc:arm64-android=fail +cpp-ipc:x64-android=fail +cppmicroservices:arm-neon-android=fail +cppmicroservices:arm64-android=fail +cppmicroservices:arm64-uwp=fail +cppmicroservices:arm64-windows-static-md=fail +cppmicroservices:arm64-windows=fail +cppmicroservices:x64-android=fail +cppmicroservices:x64-uwp=fail +# Requires full C++20 support, currently absent from CI for these triplets. +cppcoro:arm-neon-android=fail +cppcoro:arm64-android=fail +cppcoro:arm64-osx=fail +cppcoro:x64-android=fail +cppcoro:x64-linux=fail +cppcoro:x64-osx=fail +crashpad:x64-linux=fail #Compilation failed due to the lack of Clang++ compiler. +ctbench:arm64-osx=fail +ctbench:x64-osx=fail +ctp:x64-android=fail +czmq:arm-neon-android=fail +czmq:arm64-android=fail +czmq:x64-android=fail +darknet:arm-neon-android=fail +darknet:arm64-android=fail +darknet:x64-android=fail +# Since pipeline cannot automatically install dbghelp dependency, skip this detection +dbghelp:arm64-uwp=skip +dbghelp:arm64-windows-static-md=skip +dbghelp:arm64-windows=skip +dbghelp:x64-uwp=skip +dbghelp:x64-windows-release=skip +dbghelp:x64-windows-static-md=skip +dbghelp:x64-windows-static=skip +dbghelp:x64-windows=skip +dbghelp:x86-windows=skip +# Cross builds depend on try_run results +dcmtk:arm-neon-android=fail +dcmtk:arm64-android=fail +dcmtk:arm64-windows-static-md=fail +dcmtk:arm64-windows=fail +dcmtk:x64-android=fail +# legacy directxsdk which conflicts with dxsdk-d3dx +directxsdk:x64-windows-release=skip +directxsdk:x64-windows-static-md=skip +directxsdk:x64-windows-static=skip +directxsdk:x64-windows=skip +directxsdk:x86-windows=skip +discord-rpc:arm64-uwp=fail +discord-rpc:x64-uwp=fail +discordcoreapi:x64-osx=fail # Needs newer standard library than we have +discount:x64-android=fail +eathread:x64-android=fail +ecal:arm-neon-android=fail +ecal:arm64-android=fail +ecal:x64-android=fail +# variable length arrays in C++ are a Clang extension +fbbgemmerror:arm-neon-android=fail +fbbgemmerror:arm64-android=fail +fbbgemmerror:x64-android=fail +flashlight-cpu:x64-linux=fail +flashlight-cuda:x64-linux=fail +flint:arm-neon-android=fail +flint:arm64-android=fail +flint:x64-android=fail +fltk:arm-neon-android=fail +fltk:arm64-android=fail +fltk:x64-android=fail +# fluidlite conflicts with fluidsynth; we test fluidsynth rather than fluidlite because +# fluidlite has no dependencies and thus is less likely to be broken by another package. +fluidlite:arm64-osx=skip +fluidlite:arm64-uwp=skip +fluidlite:arm64-windows-windows-static-md=skip +fluidlite:arm64-windows=skip +fluidlite:x64-linux=skip +fluidlite:x64-osx=skip +fluidlite:x64-uwp=skip +fluidlite:x64-windows-release=skip +fluidlite:x64-windows-static-md=skip +fluidlite:x64-windows-static=skip +fluidlite:x64-windows=skip +fluidlite:x86-windows=skip +fmi4cpp:arm64-uwp=fail +fmi4cpp:x64-uwp=fail +# unsupported option '-mfloat-abi=' +# ALooper_pollAll no longer available +freeglut:arm-neon-android=fail +freeglut:arm64-android=fail +freeglut:x64-android=fail +# Needs XQuartz +freeglut:arm64-osx=fail +freeglut:x64-osx=fail +fruit:arm-neon-android=fail +fruit:arm64-android=fail +fruit:x64-android=fail +ftgl:arm-neon-android=fail +ftgl:arm64-android=fail +ftgl:x64-android=fail +fuzzylite:arm-neon-android=fail +fuzzylite:arm64-android=fail +fuzzylite:x64-android=fail +g3log:arm-neon-android=fail +g3log:arm64-android=fail +g3log:x64-android=fail +gainput:arm-neon-android=fail +gainput:arm64-android=fail +gainput:x64-android=fail +gamenetworkingsockets:arm-neon-android=fail +gamenetworkingsockets:arm64-android=fail +gamenetworkingsockets:x64-android=fail +gapp:arm-neon-android=fail # requires c++20 +gapp:arm64-android=fail # requires c++20 +gapp:arm64-osx=fail # requires c++20 +gapp:x64-android=fail # requires c++20 +gapp:x64-osx=fail # requires c++20 +gegl:arm64-osx=fail +gegl:x64-osx=fail +gemmlowp:arm-neon-android=fail +gemmlowp:arm64-android=fail +gemmlowp:x64-android=fail +gherkin-c:arm-neon-android=fail +gherkin-c:arm64-android=fail +gherkin-c:x64-android=fail +# Conflicts with libevent +gherkin-c:arm64-uwp=skip +gherkin-c:arm64-windows-static-md=skip +gherkin-c:arm64-windows=skip +gherkin-c:x64-linux=skip +gherkin-c:x64-osx=skip +gherkin-c:x64-uwp=skip +gherkin-c:x64-windows-release=skip +gherkin-c:x64-windows-static-md=skip +gherkin-c:x64-windows-static=skip +gherkin-c:x64-windows=skip +gherkin-c:x86-windows=skip +gl3w:arm-neon-android=fail +gl3w:arm64-android=fail +gl3w:x64-android=fail +glfw3:arm-neon-android=fail +glfw3:arm64-android=fail +glfw3:arm64-uwp=fail +glfw3:x64-android=fail +glfw3:x64-uwp=fail +glibmm:arm64-windows-static-md=fail +glibmm:x64-windows-static-md=fail +glibmm:x64-windows-static=fail +# needs arm64 host +gobject-introspection:arm-neon-android=fail +gobject-introspection:arm64-android=fail +gobject-introspection:arm64-windows-static-md=fail +gobject-introspection:arm64-windows=fail +gobject-introspection:x64-android=fail +graphicsmagick:arm64-uwp=fail +graphicsmagick:x64-uwp=fail +graphviz:arm-neon-android=fail +graphviz:arm64-android=fail +graphviz:x64-android=fail +# gsoap does not offer stable public source downloads +gsoap:x64-android=fail +gsoap:x64-windows-release=skip +gsoap:x64-windows-static-md=skip +gsoap:x64-windows-static=skip +gsoap:x64-windows=skip +gsoap:x86-windows=skip +# gtk3 randomly hangs during build on Windows +gtk3:arm64-uwp=skip +gtk3:arm64-windows-static-md=skip +gtk3:arm64-windows=skip +gtk3:x64-uwp=skip +gtk3:x64-windows-release=skip +gtk3:x64-windows-static-md=skip +gtk3:x64-windows-static=skip +gtk3:x64-windows=skip +gtk3:x86-windows=skip +gz-tools:arm-neon-android=fail +gz-tools:arm64-android=fail +gz-tools:x64-android=fail +halide:x64-windows-static=fail +hello-imgui:arm-neon-android=fail +hello-imgui:arm64-android=fail +hello-imgui:x64-android=fail +hexl:x64-android=fail +hwloc:arm-neon-android=fail +hwloc:arm64-android=fail +hwloc:x64-android=fail +iceoryx:arm-neon-android=fail +iceoryx:arm64-android=fail +iceoryx:x64-android=fail +imgui-sfml:arm-neon-android=fail +imgui-sfml:arm64-android=fail +imgui-sfml:x64-android=fail +intelrdfpmathlib:arm-neon-android=fail +intelrdfpmathlib:arm64-android=fail +intelrdfpmathlib:x64-android=fail +io2d:arm-neon-android=fail +io2d:arm64-android=fail +io2d:x64-android=fail +isal:x64-android=fail +# Failing on try_run() in cross builds +itk:arm-neon-android=fail +itk:arm64-android=fail +itk:arm64-windows-static-md=fail +itk:arm64-windows=fail +itk:x64-android=fail +jaeger-client-cpp:arm-neon-android=fail +jaeger-client-cpp:x64-android=fail +jemalloc:arm-neon-android=fail +jemalloc:arm64-android=fail +jemalloc:arm64-uwp=fail +jemalloc:arm64-windows-static-md=fail +jemalloc:arm64-windows=fail +jemalloc:x64-android=fail +jemalloc:x64-uwp=fail +jinja2cpplight:arm-neon-android=fail +jinja2cpplight:arm64-android=fail +jinja2cpplight:x64-android=fail +# needs android-29 +juce:arm-neon-android=fail +juce:arm64-android=fail +juce:x64-android=fail +# needs newer ECM version +kf6archive:arm-neon-android=skip +kf6archive:arm64-android=skip +kf6archive:x64-android=skip +lcm:arm-neon-android=fail +lcm:arm64-android=fail +lcm:arm64-windows-static-md=fail +lcm:x64-android=fail +lcm:x64-windows-static-md=fail +lcm:x64-windows-static=fail +leptonica:arm64-uwp=fail +leptonica:x64-uwp=fail +libaiff:x64-linux=fail +libcanberra:arm-neon-android=fail +libcanberra:arm64-android=fail +libcanberra:x64-android=fail +libcpplocate:arm-neon-android=fail +libcpplocate:arm64-android=fail +libcpplocate:x64-android=fail +libdc1394:arm-neon-android=fail +libdc1394:arm64-android=fail +libdc1394:x64-android=fail +libfreenect2:arm64-windows-static-md=fail +libfreenect2:arm64-windows=fail +libgo:x64-android=fail +libgo:x64-osx=fail # Fails to build due to incompatible delcaration of select in macOS 14.2 +libgxps:x64-windows-static=fail +libhdfs3:arm-neon-android=fail +libhdfs3:arm64-android=fail +libhdfs3:arm64-osx=fail +libhdfs3:x64-android=fail +libhdfs3:x64-linux=fail +libhdfs3:x64-osx=fail +# 120 min build time for libjxl arm64-uwp-rel, reason unknown +libjxl:arm64-uwp=skip +liblo:arm64-uwp=fail +liblo:x64-uwp=fail +# libmariadb conflicts with libmysql +libmariadb:arm64-osx=skip +libmariadb:arm64-windows-static-md=skip +libmariadb:arm64-windows=skip +libmariadb:x64-linux=skip +libmariadb:x64-osx=skip +libmariadb:x64-windows-release=skip +libmariadb:x64-windows-static-md=skip +libmariadb:x64-windows-static=skip +libmariadb:x64-windows=skip +libmaxminddb:arm-neon-android=fail +libmaxminddb:arm64-android=fail +libmaxminddb:x64-android=fail +libmikmod:arm-neon-android=fail +libmikmod:arm64-android=fail +libmikmod:x64-android=fail +libmodman:x64-windows-static=fail +libmysql:x86-windows=skip +libnick:arm64-osx=fail # missing system-installed copy of sqlcipher +libnick:x64-linux=fail # C++20 conformant compiler required +libnick:x64-osx=fail # missing system-installed copy of sqlcipher +libopensp:arm-neon-android=fail +libopensp:arm64-android=fail +libopensp:x64-android=fail +libp7client:x64-android=fail +# The developer of libqcow does not offer stable release archives +libqcow:arm-neon-android=skip +libqcow:arm64-android=skip +libqcow:arm64-uwp=skip +libqcow:arm64-windows-static-md=skip +libqcow:arm64-windows=skip +libqcow:x64-android=skip +libqcow:x64-linux=skip +libqcow:x64-osx=skip +libqcow:x64-uwp=skip +libqcow:x64-windows-release=skip +libqcow:x64-windows-static-md=skip +libqcow:x64-windows-static=skip +libqcow:x64-windows=skip +libqcow:x86-windows=skip +# Conflicts with openssl +libressl:arm-neon-android=skip +libressl:arm64-android=skip +libressl:arm64-osx=skip +libressl:arm64-uwp=skip +libressl:arm64-windows-static-md=skip +libressl:arm64-windows=skip +libressl:x64-android=skip +libressl:x64-linux=skip +libressl:x64-osx=skip +libressl:x64-uwp=skip +libressl:x64-windows-release=skip +libressl:x64-windows-static-md=skip +libressl:x64-windows-static=skip +libressl:x64-windows=skip +libressl:x86-windows=skip +libtar:arm-neon-android=fail +libtar:arm64-android=fail +libtomcrypt:arm64-uwp=fail +libtomcrypt:arm64-windows-static-md=fail +libtomcrypt:arm64-windows=fail +libxt:arm64-windows-static-md=fail # Inline asm used doesn't appear to support arm64-windows +libxt:arm64-windows=fail # Inline asm used doesn't appear to support arm64-windows +libxt:x64-windows-release=fail # Appears to have broken races +libxt:x64-windows=fail +linenoise-ng:arm64-uwp=fail +linenoise-ng:x64-uwp=fail +linenoise-ng:x64-windows-static-md=fail +live555:arm64-uwp=fail +live555:x64-uwp=fail +llfio:arm-neon-android=fail +llfio:arm64-android=fail +llfio:x64-android=fail +llgl:arm-neon-android=fail +llgl:arm64-android=fail +llgl:x64-android=fail +llvm:arm-neon-android=fail +llvm:arm64-android=fail +llvm:x64-android=fail +log4cplus:arm64-uwp=fail +log4cplus:x64-uwp=fail +log4cpp:x64-linux=fail # dynamic exception specifications +mchehab-zbar:arm-neon-android=fail +mchehab-zbar:arm64-android=fail +mchehab-zbar:x64-android=fail +mecab:arm64-uwp=skip +mecab:arm64-windows-static-md=skip +mecab:arm64-windows=skip +mecab:x64-linux=skip +mecab:x64-uwp=skip +mecab:x64-windows-release=skip +mecab:x64-windows-static-md=skip +mecab:x64-windows-static=skip +mecab:x64-windows=skip +mecab:x86-windows=skip +memorymodule:arm-neon-android=fail +memorymodule:arm64-android=fail +memorymodule:x64-android=fail +# Missing dependent libraries. +mesa:arm-neon-android=fail +mesa:arm64-android=fail +mesa:arm64-osx=fail +mesa:x64-android=fail +mesa:x64-linux=fail +mesa:x64-osx=fail +minifb:arm-neon-android=fail +minifb:arm64-android=fail +minifb:x64-android=fail +miniply:arm-neon-android=fail +monkeys-audio:arm-neon-android=fail +monkeys-audio:arm64-android=fail +monkeys-audio:arm64-windows-static-md=fail +monkeys-audio:arm64-windows=fail +monkeys-audio:x64-android=fail +monkeys-audio:x64-windows-static=fail +moos-core:arm-neon-android=fail +moos-core:arm64-android=fail +moos-core:x64-android=fail +moos-core:x64-windows-static=fail +moos-essential:arm64-windows-static-md=fail +moos-essential:arm64-windows=fail +moos-essential:x64-windows-release=fail +moos-essential:x64-windows-static-md=fail +moos-essential:x64-windows=fail +moos-essential:x86-windows=fail +mpir:x64-android=fail +# ms-gdkx require the Microsoft GDK with Xbox Extensions which is not installed on the CI pipeline machines +ms-gdkx:x64-windows-release=fail +ms-gdkx:x64-windows-static-md=fail +ms-gdkx:x64-windows-static=fail +ms-gdkx:x64-windows=fail +# mpir conflicts with gmp +# see https://github.com/microsoft/vcpkg/issues/11756 +mpir:arm64-windows-static-md=skip +mpir:arm64-windows=skip +mpir:x64-linux=skip +mpir:x64-osx=skip +mpir:x64-windows-release=skip +mpir:x64-windows-static-md=skip +mpir:x64-windows-static=skip +mpir:x64-windows=skip +mpir:x86-windows=skip +msquic:arm-neon-android=fail +msquic:arm64-android=fail +msquic:x64-android=fail +nana:arm-neon-android=fail +nana:arm64-android=fail +nana:arm64-osx=fail +nana:x64-android=fail +nana:x64-linux=fail +nana:x64-osx=fail +nanodbc:x64-linux=skip +netcdf-cxx4:arm64-windows-static-md=fail +netcdf-cxx4:x64-windows-static-md=fail +ngspice:x64-android=fail +ngspice:x64-windows-static=fail +nrf-ble-driver:arm-neon-android=fail +nrf-ble-driver:arm64-android=fail +nrf-ble-driver:x64-android=fail +oatpp-libressl:x64-android=fail +octave:arm64-osx=fail +octave:x64-osx=fail +offscale-libetcd-cpp:arm64-uwp=fail +offscale-libetcd-cpp:x64-uwp=fail +ogre-next:arm-neon-android=fail # std::string issue, https://github.com/microsoft/vcpkg/pull/41293#issuecomment-2942853561 +ogre-next:arm64-android=fail +ogre-next:x64-android=fail +ois:x64-android=fail +omniorb:arm-neon-android=fail +omniorb:arm64-android=fail +omniorb:x64-android=fail +# opencc/deps/rapidjson-1.1.0/rapidjson.h: Unknown machine endianess detected +# opencc/deps/marisa-0.2.5/lib/marisa/grimoire/io/mapper.cc currently doesn't support UWP. +opencc:x64-android=fail +openimageio:arm64-windows-static-md=fail +openmama:arm64-windows-static-md=fail +openmama:x64-windows-static-md=fail +openmesh:arm64-uwp=fail +openmesh:arm64-windows-static-md=fail +openmesh:arm64-windows=fail +openmesh:x64-uwp=fail +openmpi:arm-neon-android=fail +openmpi:arm64-android=fail +openmpi:x64-android=fail +openmvg:arm64-windows-static-md=fail +openmvs:arm64-windows-static-md=fail +# MSVC is not supported +openslide:x64-windows-release=fail +openslide:x64-windows-static-md=fail +openslide:x64-windows-static=fail +openslide:x64-windows=fail +openslide:x86-windows=fail +opensubdiv:x64-android=fail +# Incorrect use of arm64 intrinsics in <wchar.h> in VS 2022 17.13 broke these with -Zc:arm64-aliased-neon-types- +openvino:arm64-android=skip # conflicts with kleidiai +openvino:arm64-osx=skip # conflicts with kleidiai +openvino:arm64-windows-static-md=fail +openvino:arm64-windows=fail +openvino:x64-osx=fail # OpenVINO_VERSION_MAJOR parsed from CI_BUILD_NUMBER () and from openvino/core/version.hpp (2025) are different +openvr:x64-windows-static=fail +openzl:arm64-windows-static-md=fail +openzl:arm64-windows=fail +openzl:x64-windows-release=fail +openzl:x64-windows-static-md=fail +openzl:x64-windows-static=fail +openzl:x64-windows=fail +orc:arm-neon-android=fail +orc:arm64-android=fail +orc:x64-android=fail +paho-mqtt:arm64-uwp=fail +paho-mqtt:x64-uwp=fail +paho-mqttpp3:arm-neon-android=fail +paho-mqttpp3:arm64-android=fail +paho-mqttpp3:x64-android=fail +paraview:arm64-windows-static-md=fail +paraview:arm64-windows=fail +platform-folders:arm64-uwp=fail +platform-folders:x64-uwp=fail +plib:arm-neon-android=fail +plib:arm64-android=fail +plib:x64-android=fail +pmdk:x64-android=fail +pmdk:x64-osx=fail +pmdk:x64-windows-static=fail +python2:arm-neon-android=fail +python2:arm64-android=fail +python2:x64-android=fail +qt-advanced-docking-system:arm-neon-android=fail +qt-advanced-docking-system:arm64-android=fail +qt-advanced-docking-system:x64-android=fail +qt5-base:arm-neon-android=fail +qt5-base:arm64-android=fail +qt5-base:arm64-windows-static-md=fail +qt5-base:arm64-windows=fail +qt5-base:x64-android=fail +# Skipped to avoid exceeding the 48 hour time limit in CI +# May also need an older ninja version +qt5-webengine:x64-windows-release=skip +qt5-webengine:x64-windows=skip +qt5-webengine:x86-windows=skip +# Missing system libraries +qt5-x11extras:arm64-osx=skip +qt5-x11extras:x64-osx=skip +qtmultimedia:arm64-android=fail +qtmultimedia:x64-android=fail +qtopcua:arm-neon-android=fail +qtopcua:arm64-android=fail +qtopcua:x64-android=fail +qtwayland:arm-neon-android=fail +qtwayland:arm64-android=fail +qtwayland:x64-android=fail +# Missing system libraries +qtwayland:arm64-osx=skip +qtwayland:x64-osx=skip +quickfix:arm-neon-android=fail +quickfix:arm64-android=fail +qwt-qt6:x64-osx=fail +rapidstring:arm64-uwp=fail +rapidstring:arm64-windows-static-md=fail +rapidstring:arm64-windows=fail +rapidstring:x64-linux=fail +rapidstring:x64-uwp=fail +rapidstring:x64-windows-release=fail +rapidstring:x64-windows-static-md=fail +rapidstring:x64-windows-static=fail +rapidstring:x64-windows=fail +rapidstring:x86-windows=fail +# file conflicts with rbdl +rbdl:arm-neon-android=fail +rbdl:arm64-android=fail +rbdl:x64-android=fail +restbed:arm-neon-android=fail +restbed:arm64-android=fail +restbed:arm64-uwp=fail +restbed:x64-uwp=fail +rpclib:arm64-uwp=fail +rpclib:arm64-windows-static-md=fail +rpclib:arm64-windows=fail +rpclib:x64-uwp=fail +rtmidi:arm-neon-android=fail +rtmidi:arm64-android=fail +rtmidi:x64-android=fail +salome-medcoupling:x64-linux=fail +saucer:arm64-osx=fail # std::move_only_function is not supported +saucer:x64-linux=fail # requires gcc14 or later +saucer:x64-osx=fail # std::move_only_function is not supported +septag-sx:x64-android=fail +sfgui:arm-neon-android=fail +sfgui:arm64-android=fail +sfgui:x64-android=fail +simbody:arm64-windows-static-md=fail +simbody:arm64-windows=fail +simd:arm-neon-android=fail +simd:arm64-android=fail +simd:x64-android=fail +sjpeg:arm-neon-android=fail +sjpeg:arm64-android=fail +sjpeg:x64-android=fail +sleef:x86-windows=fail +sleepy-discord:arm-neon-android=fail # std::string issue, https://github.com/microsoft/vcpkg/pull/41293#issuecomment-2942853561 +sleepy-discord:arm64-android=fail +sleepy-discord:x64-android=fail +slikenet:arm-neon-android=fail +slikenet:arm64-android=fail +slikenet:x64-android=fail +soem:arm-neon-android=fail +soem:arm64-android=fail +soem:x64-android=fail +soil:arm-neon-android=fail +soil:arm64-android=fail +soil:x64-android=fail +solid3:arm64-android=fail +spaceland:arm64-android=fail +spaceland:arm64-uwp=fail +spaceland:arm64-windows-static-md=fail +spaceland:arm64-windows=fail +spaceland:x64-android=fail +spaceland:x64-uwp=fail +spscqueue:arm-neon-android=fail +spscqueue:arm64-android=fail +spscqueue:x64-android=fail +# sqlpp11-connector-mysql: CI issues resolved by overlay port +stormlib:arm64-uwp=fail +stormlib:x64-uwp=fail +# _Interlocked* intrinsic functions are not available on x86 +suitesparse-graphblas:x86-windows=fail +systemc:arm64-uwp=fail +systemc:x64-uwp=fail +teemo:x64-android=fail +telnetpp:arm-neon-android=fail +telnetpp:arm64-android=fail +telnetpp:x64-android=fail +# tensorflow does not support VS2022 +tensorflow:x64-android=skip +tensorflow:x64-windows-release=skip +tensorflow:x64-windows-static-md=skip +tensorflow:x64-windows-static=skip +tensorflow:x64-windows=skip +tensorflow-cc:x64-android=skip +tensorflow-cc:x64-windows-release=skip +tensorflow-cc:x64-windows-static-md=skip +tensorflow-cc:x64-windows-static=skip +tensorflow-cc:x64-windows=skip +# tensorflow is broken with system libraries on macOS 13.5 +# Also skipping because our macOS machines are relatively underpowered and this saves 8 hours of CI +# time for a relatively unpopular library / system combo. +tensorflow:arm64-osx=skip +tensorflow:x64-osx=skip +tensorflow-cc:arm64-osx=skip +tensorflow-cc:x64-osx=skip +# Building tensorflow inside docker fails with +# FATAL: $USER is not set, and unable to look up name of current user: (error: 0): Success +tensorflow:x64-linux=skip +tensorflow-cc:x64-linux=skip + +tgui:arm-neon-android=fail +tgui:arm64-android=fail +tgui:x64-android=fail +tinycthread:arm-neon-android=fail +tinycthread:arm64-android=fail +tinycthread:x64-android=fail +torch-th:arm64-uwp=fail +torch-th:arm64-windows-static-md=fail +torch-th:arm64-windows=fail +torch-th:x64-uwp=fail +torch-th:x64-windows-static=fail +urho3d:x64-osx=fail +# Proper support for a true static usd build is left as a future port improvement. It probably require fiddling with its monolithic mode. +usd:x64-windows-static=skip +# the version of v8 we have in the repo doesn't support VS2022 +v8:x64-android=fail +v8:x64-windows-release=fail +v8:x64-windows-static-md=fail +v8:x64-windows-static=fail +v8:x64-windows=fail +v8:x86-windows=fail +# https://github.com/vsg-dev/vsgQt/pull/53 +vsgqt:arm-neon-android=fail +vsgqt:arm64-android=fail +vsgqt:x64-android=fail +wasmedge:arm-neon-android=fail +# Collides with libpcap -> similar headers +winpcap:x64-windows-release=skip +winpcap:x64-windows=skip +winpcap:x86-windows=skip +wordnet:arm-neon-android=fail +wordnet:arm64-android=fail +wordnet:x64-android=fail +workflow:arm-neon-android=fail +workflow:arm64-android=fail +workflow:x64-android=fail +# ignore `wpilib` build errors until upgrade to a new release version +wpilib:arm-neon-android=fail # requires full c++20 support +wpilib:arm64-android=fail # requires full c++20 support +wpilib:arm64-osx=fail +wpilib:arm64-windows-static-md=fail +wpilib:arm64-windows=fail +wpilib:x64-android=fail # requires full c++20 support +wpilib:x64-linux=fail +wpilib:x64-osx=fail +wpilib:x64-windows-release=fail +wpilib:x64-windows-static-md=fail +wpilib:x64-windows-static=fail +wpilib:x64-windows=fail +wpilib:x86-windows=fail +# No xorg-macros available on osx +xbitmaps:arm-neon-android=fail +xbitmaps:arm64-android=fail +xbitmaps:arm64-osx=skip +xbitmaps:x64-android=fail +xbitmaps:x64-osx=skip +zeroc-ice:arm-neon-android=fail +zeroc-ice:arm64-android=fail +zeroc-ice:x64-android=fail +# Needs Java runtime +zookeeper:arm64-osx=fail +zookeeper:arm64-uwp=fail +zookeeper:arm64-windows-static-md=fail +zookeeper:arm64-windows=fail +zookeeper:x64-linux=fail +zookeeper:x64-osx=fail +zookeeper:x64-uwp=fail +zookeeper:x64-windows-release=fail +zookeeper:x64-windows-static-md=fail +zookeeper:x64-windows-static=fail +zookeeper:x64-windows=fail +zookeeper:x86-windows=fail +zyre:arm64-windows-static-md=fail +zyre:x64-windows-static-md=fail + +# Ports which needs to pass in CI +cmake:arm64-osx=pass +cmake:arm64-windows-static-md=pass +cmake:arm64-windows=pass +cmake:x64-linux=pass +cmake:x64-osx=pass +cmake:x64-windows-release=pass +cmake:x64-windows-static-md=pass +cmake:x64-windows-static=pass +cmake:x64-windows=pass +cmake-user:arm-neon-android=pass +cmake-user:arm64-android=pass +cmake-user:arm64-uwp=pass +cmake-user:arm64-windows-static-md=pass +cmake-user:arm64-windows=pass +cmake-user:x64-android=pass +cmake-user:x64-linux=pass +cmake-user:x64-osx=pass +cmake-user:x64-uwp=pass +cmake-user:x64-windows-release=pass +cmake-user:x64-windows-static-md=pass +cmake-user:x64-windows-static=pass +cmake-user:x64-windows=pass +cmake-user:x86-windows=pass +gtk:arm64-osx=pass +gtk:x64-linux=pass +gtk:x64-osx=pass +gtk:x64-windows-release=pass +gtk:x64-windows-static-md=pass +gtk:x64-windows=pass +gtk:x86-windows=pass +qt:arm64-osx=pass +qt:arm64-windows-static-md=pass +qt:arm64-windows=pass +qt:x64-linux=pass +qt:x64-osx=pass +qt:x64-windows-release=pass +qt:x64-windows-static-md=pass +qt:x64-windows-static=pass +qt:x64-windows=pass +# qt:*-android=pass : qtmultimedia, qtquick3d, qtwayland fail +qtbase:arm-neon-android=pass +qtbase:arm64-android=pass +qtbase:x64-android=pass +vcpkg-ci-arrow:x64-linux=pass +vcpkg-ci-arrow:x64-osx=pass +vcpkg-ci-arrow:x64-windows-release=pass +vcpkg-ci-arrow:x64-windows-static-md=pass +vcpkg-ci-arrow:x64-windows-static=pass +vcpkg-ci-arrow:x64-windows=pass +vcpkg-ci-aurora-au:x64-linux=pass +vcpkg-ci-boost:arm-neon-android=pass +vcpkg-ci-boost:arm64-android=pass +vcpkg-ci-boost:arm64-uwp=pass +vcpkg-ci-boost:arm64-windows-static-md=pass +vcpkg-ci-boost:arm64-windows=pass +vcpkg-ci-boost:x64-android=pass +vcpkg-ci-boost:x64-linux=pass +vcpkg-ci-boost:x64-osx=pass +vcpkg-ci-boost:x64-uwp=pass +vcpkg-ci-boost:x64-windows-release=pass +vcpkg-ci-boost:x64-windows-static-md=pass +vcpkg-ci-boost:x64-windows-static=pass +vcpkg-ci-boost:x64-windows=pass +vcpkg-ci-boost:x86-windows=pass +vcpkg-ci-curl:arm-neon-android=pass +vcpkg-ci-curl:arm64-android=pass +vcpkg-ci-curl:arm64-osx=pass +vcpkg-ci-curl:arm64-uwp=pass +vcpkg-ci-curl:arm64-windows-static-md=pass +vcpkg-ci-curl:arm64-windows=pass +vcpkg-ci-curl:x64-android=pass +vcpkg-ci-curl:x64-linux=pass +vcpkg-ci-curl:x64-osx=pass +vcpkg-ci-curl:x64-uwp=pass +vcpkg-ci-curl:x64-windows-release=pass +vcpkg-ci-curl:x64-windows-static-md=pass +vcpkg-ci-curl:x64-windows-static=pass +vcpkg-ci-curl:x64-windows=pass +vcpkg-ci-curl:x86-windows=pass +vcpkg-ci-duckdb:arm-neon-android=pass +vcpkg-ci-duckdb:arm64-android=pass +vcpkg-ci-duckdb:arm64-osx=pass +vcpkg-ci-duckdb:arm64-windows-static-md=pass +vcpkg-ci-duckdb:arm64-windows=pass +vcpkg-ci-duckdb:x64-android=pass +vcpkg-ci-duckdb:x64-linux=pass +vcpkg-ci-duckdb:x64-osx=pass +vcpkg-ci-duckdb:x64-windows-release=pass +vcpkg-ci-duckdb:x64-windows-static-md=pass +vcpkg-ci-duckdb:x64-windows-static=pass +vcpkg-ci-duckdb:x64-windows=pass +vcpkg-ci-duckdb:x86-windows=pass +vcpkg-ci-ffmpeg:arm-neon-android=pass +vcpkg-ci-ffmpeg:arm64-android=pass +vcpkg-ci-ffmpeg:arm64-osx=pass +vcpkg-ci-ffmpeg:arm64-uwp=pass +vcpkg-ci-ffmpeg:arm64-windows-static-md=pass +vcpkg-ci-ffmpeg:arm64-windows=pass +vcpkg-ci-ffmpeg:x64-android=pass +vcpkg-ci-ffmpeg:x64-linux=pass +vcpkg-ci-ffmpeg:x64-osx=pass +vcpkg-ci-ffmpeg:x64-uwp=pass +vcpkg-ci-ffmpeg:x64-windows-release=pass +vcpkg-ci-ffmpeg:x64-windows-static-md=pass +vcpkg-ci-ffmpeg:x64-windows-static=pass +vcpkg-ci-ffmpeg:x64-windows=pass +vcpkg-ci-ffmpeg:x86-windows=pass +vcpkg-ci-freerdp:arm-neon-android=pass +vcpkg-ci-freerdp:arm64-android=pass +vcpkg-ci-freerdp:arm64-osx=pass +vcpkg-ci-freerdp:arm64-windows-release=pass +vcpkg-ci-freerdp:arm64-windows-static-md=pass +vcpkg-ci-freerdp:arm64-windows=pass +vcpkg-ci-freerdp:x64-android=pass +vcpkg-ci-freerdp:x64-linux=pass +vcpkg-ci-freerdp:x64-osx=pass +vcpkg-ci-freerdp:x64-windows-release=pass +vcpkg-ci-freerdp:x64-windows-static-md=pass +vcpkg-ci-freerdp:x64-windows-static=pass +vcpkg-ci-freerdp:x64-windows=pass +vcpkg-ci-freerdp:x86-windows=pass +vcpkg-ci-gdal:arm-neon-android=pass +vcpkg-ci-gdal:arm64-android=pass +vcpkg-ci-gdal:arm64-osx=pass +vcpkg-ci-gdal:arm64-windows-static-md=pass +vcpkg-ci-gdal:arm64-windows=pass +vcpkg-ci-gdal:x64-android=pass +vcpkg-ci-gdal:x64-linux=pass +vcpkg-ci-gdal:x64-osx=pass +vcpkg-ci-gdal:x64-windows-release=pass +vcpkg-ci-gdal:x64-windows-static-md=pass +vcpkg-ci-gdal:x64-windows-static=pass +vcpkg-ci-gdal:x64-windows=pass +vcpkg-ci-gdal:x86-windows=pass +vcpkg-ci-itk:arm64-osx=pass +vcpkg-ci-itk:x64-linux=pass +vcpkg-ci-itk:x64-osx=pass +vcpkg-ci-itk:x64-windows-release=pass +vcpkg-ci-itk:x64-windows-static-md=pass +vcpkg-ci-itk:x64-windows-static=pass +vcpkg-ci-itk:x64-windows=pass +vcpkg-ci-itk:x86-windows=pass +vcpkg-ci-libigl:arm-neon-android=pass +vcpkg-ci-libigl:arm64-android=pass +vcpkg-ci-libigl:arm64-osx=pass +vcpkg-ci-libigl:arm64-windows-static-md=pass +vcpkg-ci-libigl:arm64-windows=pass +vcpkg-ci-libigl:x64-android=pass +vcpkg-ci-libigl:x64-linux=pass +vcpkg-ci-libigl:x64-osx=pass +vcpkg-ci-libigl:x64-windows-release=pass +vcpkg-ci-libigl:x64-windows-static-md=pass +vcpkg-ci-libigl:x64-windows-static=pass +vcpkg-ci-libigl:x64-windows=pass +vcpkg-ci-libigl:x86-windows=pass +vcpkg-ci-llvm:x64-linux=pass +vcpkg-ci-llvm:x64-osx=pass +vcpkg-ci-llvm:x64-windows-release=pass +vcpkg-ci-llvm:x64-windows-static-md=pass +vcpkg-ci-llvm:x64-windows-static=pass +vcpkg-ci-llvm:x64-windows=pass +vcpkg-ci-llvm:x86-windows=pass +vcpkg-ci-mathgl:x64-linux=pass +vcpkg-ci-mathgl:x64-osx=pass +vcpkg-ci-mathgl:x64-windows-release=pass +vcpkg-ci-mathgl:x64-windows-static-md=pass +vcpkg-ci-mathgl:x64-windows-static=pass +vcpkg-ci-mathgl:x64-windows=pass +vcpkg-ci-mathgl:x86-windows=pass +vcpkg-ci-opencv:arm-neon-android=pass +vcpkg-ci-opencv:arm64-android=pass +vcpkg-ci-opencv:arm64-osx=pass +# OpenCV appears to be trying to use __fp16 on a platform that does not support that +# buildtrees\opencv4\src\4.11.0-46ecfbc8ae.clean\modules\dnn\src\layers\cpu_kernels\conv_winograd_f63.simd.hpp(1371): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int +#vcpkg-ci-opencv:arm64-windows-static-md=pass +opencv4:arm64-windows-static-md=fail +#vcpkg-ci-opencv:arm64-windows=pass +opencv4:arm64-windows=fail +vcpkg-ci-opencv:arm64-uwp=pass +vcpkg-ci-opencv:x64-android=pass +vcpkg-ci-opencv:x64-linux=pass +vcpkg-ci-opencv:x64-osx=pass +vcpkg-ci-opencv:x64-uwp=pass +vcpkg-ci-opencv:x64-windows-release=pass +vcpkg-ci-opencv:x64-windows-static-md=pass +vcpkg-ci-opencv:x64-windows-static=pass +vcpkg-ci-opencv:x64-windows=pass +vcpkg-ci-opencv:x86-windows=pass +vcpkg-ci-openimageio:x64-windows-release=pass +vcpkg-ci-openimageio:x64-windows-static-md=pass +vcpkg-ci-openimageio:x64-windows-static=pass +vcpkg-ci-openimageio:x64-windows=pass +vcpkg-ci-openimageio:x86-windows=pass +vcpkg-ci-paraview:arm64-osx=pass +vcpkg-ci-paraview:x64-linux=pass +vcpkg-ci-paraview:x64-osx=pass +vcpkg-ci-paraview:x64-windows-release=pass +vcpkg-ci-paraview:x64-windows-static-md=pass +vcpkg-ci-paraview:x64-windows-static=pass +vcpkg-ci-paraview:x64-windows=pass +vcpkg-ci-paraview:x86-windows=pass +vcpkg-ci-skia:arm-neon-android=pass +vcpkg-ci-skia:arm64-android=pass +vcpkg-ci-skia:arm64-uwp=pass +vcpkg-ci-skia:arm64-windows-static-md=pass +vcpkg-ci-skia:arm64-windows=pass +vcpkg-ci-skia:x64-android=pass +vcpkg-ci-skia:x64-linux=pass +vcpkg-ci-skia:x64-osx=pass +vcpkg-ci-skia:x64-uwp=pass +vcpkg-ci-skia:x64-windows-release=pass +vcpkg-ci-skia:x64-windows-static-md=pass +vcpkg-ci-skia:x64-windows-static=pass +vcpkg-ci-skia:x64-windows=pass +vcpkg-ci-skia:x86-windows=pass +vcpkg-ci-soci:x64-linux=pass +vcpkg-ci-soci:x64-osx=pass +vcpkg-ci-soci:x64-windows-release=pass +vcpkg-ci-soci:x64-windows-static-md=pass +vcpkg-ci-soci:x64-windows-static=pass +vcpkg-ci-soci:x64-windows=pass +vcpkg-ci-sqlpp11:arm-neon-android=pass +vcpkg-ci-sqlpp11:arm64-android=pass +vcpkg-ci-sqlpp11:arm64-osx=pass +vcpkg-ci-sqlpp11:arm64-uwp=pass +vcpkg-ci-sqlpp11:arm64-windows-static-md=pass +vcpkg-ci-sqlpp11:arm64-windows=pass +vcpkg-ci-sqlpp11:x64-android=pass +vcpkg-ci-sqlpp11:x64-linux=pass +vcpkg-ci-sqlpp11:x64-osx=pass +vcpkg-ci-sqlpp11:x64-uwp=pass +vcpkg-ci-sqlpp11:x64-windows-release=pass +vcpkg-ci-sqlpp11:x64-windows-static-md=pass +vcpkg-ci-sqlpp11:x64-windows-static=pass +vcpkg-ci-sqlpp11:x64-windows=pass +vcpkg-ci-sqlpp11:x86-windows=pass +vcpkg-ci-vxl:arm-neon-android=pass +vcpkg-ci-vxl:arm64-android=pass +vcpkg-ci-vxl:arm64-osx=pass +vcpkg-ci-vxl:arm64-windows-static-md=pass +vcpkg-ci-vxl:arm64-windows=pass +vcpkg-ci-vxl:x64-android=pass +vcpkg-ci-vxl:x64-linux=pass +vcpkg-ci-vxl:x64-osx=pass +vcpkg-ci-vxl:x64-windows-release=pass +vcpkg-ci-vxl:x64-windows-static-md=pass +vcpkg-ci-vxl:x64-windows-static=pass +vcpkg-ci-vxl:x64-windows=pass +vcpkg-ci-vxl:x86-windows=pass +vcpkg-ci-wxwidgets:arm64-windows-static-md=pass +vcpkg-ci-wxwidgets:arm64-windows=pass +vcpkg-ci-wxwidgets:x64-linux=pass +vcpkg-ci-wxwidgets:x64-osx=pass +vcpkg-ci-wxwidgets:x64-windows-release=pass +vcpkg-ci-wxwidgets:x64-windows-static-md=pass +vcpkg-ci-wxwidgets:x64-windows-static=pass +vcpkg-ci-wxwidgets:x64-windows=pass +vcpkg-ci-wxwidgets:x86-windows=pass +zookeeper:arm-neon-android=pass +zookeeper:arm64-android=pass +zookeeper:x64-android=pass + +# Skipped due to time and x64-osx going away soon: +arrayfire:x64-osx=skip +dartsim:x64-osx=skip # due to dependency on osg +gz-cmake:x64-osx=skip +gz-cmake3:x64-osx=skip +gz-common:x64-osx=skip +gz-common5:x64-osx=skip +gz-fuel-tools:x64-osx=skip +gz-fuel-tools8:x64-osx=skip +gz-gui:x64-osx=skip +gz-gui7:x64-osx=skip +gz-math:x64-osx=skip +gz-math7:x64-osx=skip +gz-msgs:x64-osx=skip +gz-msgs9:x64-osx=skip +gz-physics:x64-osx=skip +gz-physics6:x64-osx=skip +gz-plugin:x64-osx=skip +gz-plugin2:x64-osx=skip +gz-rendering:x64-osx=skip +gz-rendering7:x64-osx=skip +gz-sensors:x64-osx=skip +gz-sensors7:x64-osx=skip +gz-sim:x64-osx=skip +gz-tools:x64-osx=skip +gz-tools2:x64-osx=skip +gz-transport:x64-osx=skip +gz-transport12:x64-osx=skip +gz-utils:x64-osx=skip +gz-utils2:x64-osx=skip +libtorch:x64-osx=skip +mdl-sdk:x64-osx=skip +osg:x64-osx=skip +osg-qt:x64-osx=skip # due to dependency on osg +osgearth:x64-osx=skip # due to dependency on osg +sdformat:x64-osx=skip # due to dependency on gz-* diff --git a/vcpkg/scripts/ci.feature.baseline.txt b/vcpkg/scripts/ci.feature.baseline.txt new file mode 100644 index 0000000..476d4c5 --- /dev/null +++ b/vcpkg/scripts/ci.feature.baseline.txt @@ -0,0 +1,2043 @@ +########################################################################### +## This file defines the current expected build state of ports in CI. +## +## States +## The following states can be specified for a port: +## If a port is missing from this file then it is assumed +## to build successfully. +## fail - The port build is expected to fail in the CI system. +## This is not necessarily the same as if a port is expected to build +## on a developers machine because it may fail due to the machine +## configuration. +## skip - Do not build this port in the CI system. +## This is added to ports that may be flaky or conflict with other +## ports. Please comment for why a port is skipped so it can be +## removed when the issue is resolved. +## cascade - The port depends on a port that fails or is excluded by a supports +## expression of a dependency but the port itself states that it can be build. +## This is added to ports to detect "hidden" not tested ports. +## +## Additional States can be specified for specific features: +## feature-fails - The listed feature do not build. They are therefore excluded +## from the "combined" feature test because it would +## simply fail too. +## combination-fails - The listed combination of features will fail to build. +## skip - The listed features are not tested in the CI system. +## cascade - The listed features are cascading. +## no-separate-feature-test - The listed features are not tested in the "separate" feature test. +## options - The listed features are mutually exclusive and can not be selected together. +## The first feature in the list is added to every test combination. Use the `core` +## feature as first one to add no feature to every test combination. +## +## You could select ports by triplet or supports expression: +## curl[wchar]:x64-osx = feature-fails # the wchar feature does not work on !windows +## curl[wchar](!windows) = feature-fails # Using support expressions is often shorter than listing all triplets +## +## Examples: +## qt3d[extras] = options # extras will be always added to the test combination (it is currently a requirement) +## curl[core,openssl,wolfssl] = options # openssl and wolfssl are exclusive ssl backends but none must be selected +## libgit2[pcre,pcre2] = options # you have to select pcre xor pcre2 +## +## libcanberra[gtk3](osx) = combination-fails # The feature works in the "combined" feature test +## vlpp[tools](osx) = feature-fails # error: use of undeclared identifier 'PATH_MAX' +## +## entt[experimental] = skip # required head build +## realsense2[openni2](!windows) = cascade # cpkg-tool-lessmsi[core] only supports native & windows +## +## # Testing all targets separately would be too time consuming: +## halide[target-amdgpu,target-arm,target-d3d12compute,target-hexagon,target-metal,target-mips,target-nvptx,target-opencl,target-powerpc,target-riscv,target-x86] = no-separate-feature-test + +halide = skip +llvm = skip + +# Add new items alphabetically +ace[tao]:arm-neon-android=feature-fails # tao requires a host tree with tao_idl compiled for the host +ace[tao]:arm64-android=feature-fails +ace[tao]:x64-android=feature-fails +allegro5:arm64-windows=fail # Fails with "fatal error LNK1322: cannot avoid potential ARM hazard" even with /Gy +apr:arm64-windows=fail # Cross compiling CI machine cannot run gen_test_char to generate apr_escape_test_char.h +blitz:arm64-windows=fail +caf(android | uwp)=fail +caffe2:arm64-windows=fail +caffe2:x86-windows=fail +casclib(uwp)=fail +cctag:x64-windows-static-md=fail +cello(uwp)=fail +clamav:arm64-windows=fail +clapack(android)=fail # needs target configuration data +clockutils:arm-neon-android=fail # gnustl_shared is no longer supported. Please switch to either c++_shared or c++_static. +clockutils:arm64-android=fail +clockutils:x64-android=fail +coroutine(uwp)=fail +cpp-netlib(uwp)=fail +cppcoro(uwp | linux | osx)=fail +cppfs(uwp)=fail +cppmicroservices(uwp | (windows & arm))=fail +cpprestsdk(android)=fail +crashpad:x64-linux=fail +ctemplate:x64-linux=fail +ctemplate:x64-osx=fail +cuda:x64-osx=fail +curl[core,http3,gnutls]=options +curl[core,http3,mbedtls]=options +curl[core,http3,wolfssl]=options +dimcli(windows & static)=fail # VS2019 version 16.9.4's project system changes where PDBs are placed in a way that breaks the upstream build script of this port. See https://developercommunity.visualstudio.com/t/Toolset-169-regression-vcxproj-producin/1356639 +discord-game-sdk:x64-windows-static-md=fail +discord-game-sdk:x64-windows-static=fail +discord-rpc(uwp)=fail +dmlc(uwp) = fail +dpdk[docs]:x64-linux = feature-fails # doxygen required to build docs +ensmallen[openmp](osx) = feature-fails # No openmp on default osx toolchain +epsilon(uwp)=fail +faiss:arm64-windows=fail +fmi4cpp(uwp)=fail +forge:x86-windows=fail +freeglut(android)=fail +freeglut(osx)=fail # Needs XQuartz +freeopcua:arm64-windows=fail # Needs /bigobj +functions-framework-cpp:x64-uwp=fail # https://github.com/GoogleCloudPlatform/functions-framework-cpp/issues/207 +g3log:arm-neon-android=fail +g3log:arm64-android=fail +g3log:x64-android=fail +gazebo:x64-linux=fail +gazebo:x64-windows=fail # VS 2022 Update 3 seems to have broken Gazebo: https://devdiv.visualstudio.com/DefaultCollection/DevDiv/_workitems/edit/1522474 +gflags(uwp)=fail +glfw3(uwp)=fail +glibmm:x64-windows-static-md=fail +glibmm:x64-windows-static=fail +google-cloud-cpp(uwp)=fail +graphicsmagick(uwp)=fail +graphqlparser:arm64-osx=fail # python2 required +gtk:x64-windows-static=fail +hunspell:x64-windows-static-md=fail +ideviceinstaller:x64-windows-static-md=fail +idevicerestore:x64-linux=fail +idevicerestore:x64-osx=fail +ignition-common1:x64-linux=fail +irrlicht[tools]:x64-linux=feature-fails +ismrmrd:x86-windows=fail +jemalloc(android)=fail +jemalloc(windows & (arm | uwp))=fail +kfr[capi](windows) = feature-fails # feature emits DLL even when built static +lcm:x64-windows-static-md=fail +lcm:x64-windows-static=fail +leptonica(uwp)=fail +libaiff:x64-linux=fail +libcerf:x64-windows-static-md=fail +libcopp:arm64-windows=fail +libfreenect2:arm64-windows=fail +libgo:x64-android=fail +libgo:x64-osx=fail # Fails to build due to incompatible delcaration of select in macOS 14.2 +libgpod:x64-linux=fail # Missing system libraries on linux to run/prepare autoconf +libgpod:x64-osx=fail +libgxps:x64-windows-static-md=fail +libgxps:x64-windows-static=fail +libigl[opengl](android)=feature-fails +libirecovery:x64-windows-static-md=fail +liblo(uwp)=fail +libmodman:x64-windows-static=fail +libopensp(android)=fail +libplist:x64-windows-static=fail +libssh:arm-uwp=fail +libssh:x64-uwp=fail +libtins:arm-uwp=fail +libtins:x64-uwp=fail +libtomcrypt(arm & windows)=fail +libusbmuxd:arm-uwp=fail +libusbmuxd:x64-osx=fail +libusbmuxd:x64-uwp=fail +libuv:arm-uwp=fail +libuv:x64-uwp=fail +libwandio:arm-uwp=fail +libwandio:arm64-windows=fail +libwandio:x64-uwp=fail +libwandio:x64-windows-static-md=fail +libwandio:x64-windows-static=fail +libwandio:x64-windows=fail +libwandio:x86-windows=fail +libwebp[core]:x64-android=combination-fails # Compiler crash without simd +libxt:arm64-windows-static-md=fail # Inline asm used doesn't appear to support arm64-windows +libxt:arm64-windows=fail # Inline asm used doesn't appear to support arm64-windows +libxt:x64-windows-release=fail # Appears to have broken races +libxt:x64-windows=fail +live555(uwp)=fail +llgl(uwp)=fail # fails due to an outdated gcc version +log4cplus(uwp)=fail +luajit:arm64-windows=fail +luasec:x64-windows-static=fail +mesa:x64-linux=fail # Missing dependent libraries. +mesa:x64-windows-static=fail # Due to static crt. +milerius-sfml-imgui:x64-windows-static=fail +mlpack:x64-uwp=fail # https://github.com/mlpack/mlpack/pull/2945 +monkeys-audio:arm64-windows=fail +monkeys-audio:x64-windows-static=fail +moos-core:x64-windows-static=fail +moos-essential:arm64-windows=fail +moos-essential:x64-windows-static-md=fail +moos-essential:x64-windows=fail +moos-essential:x86-windows=fail +msquic:arm-neon-android=fail +msquic:arm64-android=fail +msquic:x64-android=fail +nana:x64-linux=fail +nana:x64-osx=fail +nana:x64-uwp=fail +netcdf-cxx4:x64-windows-static-md=fail +ngspice:x64-windows-static=fail +octave(osx)=fail # blas must select openblas instead of Accelerate +ode:arm64-windows=fail +offscale-libetcd-cpp(uwp)=fail +ogre-next(android)=fail +ois:x64-android=fail +opencc:arm64-windows=fail # opencc/deps/rapidjson-1.1.0/rapidjson.h: Unknown machine endianess detected +opencc:x64-android=fail +opencc(uwp)=fail # opencc/deps/marisa-0.2.5/lib/marisa/grimoire/io/mapper.cc currently doesn't support UWP. +opencv4[core,cuda,world](windows)=options +opencv4[dnn]:arm64-osx=feature-fails +opencv4[dnn](arm & windows & !uwp) = feature-fails +opencv4[dshow](!windows | uwp)=feature-fails +opencv4[halide](!android & !(windows & staticcrt) & !uwp & !(arm & windows))=feature-fails # error C2039: 'attachHalide': is not a member of 'cv::dnn::GeluFunctor' +opencv4[opengl]:x64-linux=feature-fails +opencv4[opengl](android)=feature-fails +opencv4[opengl](windows&!uwp)=feature-fails # Option WITH_OPENGL is enabled but corresponding dependency have not been found: "HAVE_OPENGL" is FALSE +opencv4[openvino]:arm64-osx=feature-fails +opencv4[ovis](android)=feature-fails +opencv4[vulkan]:arm64-osx=feature-fails +opencv4[vulkan](arm & windows & !uwp) = feature-fails +openmama:x64-windows-static-md=fail +openmesh:arm64-windows=fail +openmesh(uwp)=fail +openmpi:arm-neon-android=fail +openmpi:arm64-android=fail +openmpi:x64-android=fail +openslide(windows & native)=fail # g_auto* using __attribute__((cleanup)) +# Incorrect use of arm64 intrinsics in <wchar.h> in VS 2022 17.13 broke these with -Zc:arm64-aliased-neon-types- +openvino:arm64-windows-static-md=fail +openvino:arm64-windows=fail +openvino:x64-osx=fail # OpenVINO_VERSION_MAJOR parsed from CI_BUILD_NUMBER () and from openvino/core/version.hpp (2025) are different +openvpn3:x64-osx=fail +openvr:x64-windows-static=fail +openzl:arm64-windows-static-md=fail +openzl:arm64-windows=fail +openzl:x64-windows-release=fail +openzl:x64-windows-static-md=fail +openzl:x64-windows-static=fail +openzl:x64-windows=fail +paho-mqtt(uwp)=fail +paho-mqttpp3:arm-neon-android=fail +paho-mqttpp3:arm64-android=fail +paho-mqttpp3:x64-android=fail +paraview(arm64 & windows & !uwp)=fail # in-build host tools +pfring:arm64-osx=fail +pfring:x64-osx=fail +platform-folders(uwp)=fail +pmdk:x64-osx=fail +pmdk:x64-windows-static=fail +qbittorrent:x64-linux=fail # Not yet ready for these platforms. +qbittorrent:x64-osx=fail # Not yet ready for these platforms. +qt-advanced-docking-system(android)=fail +# qt5-base: no cross builds +qt5-base(arm & windows & !uwp)=fail +qt5-wayland:x64-osx=fail # Missing system libraries +qt5-webengine(!(arm & windows) & !uwp) = fail # Missing prerequisites for CI success +qt5-x11extras(osx)=fail # Missing system libraries +qt5-x11extras(windows)=fail # Missing libraries +qtwayland(android | osx)=fail # Missing system libraries +qwt-qt6:x64-osx=fail +realsense[core](uwp) = combination-fails +realsense[tools](uwp) = feature-fails +restbed(uwp)=fail +rocksdb:x64-uwp=fail +rpclib:arm64-windows=fail +rpclib(uwp)=fail +shiva:x64-windows-static-md=fail +shiva:x64-windows-static=fail +shiva-sfml:arm64-osx=fail +shiva-sfml:x64-linux=fail +shiva-sfml:x64-osx=fail +shiva-sfml:x64-windows=fail +shiva-sfml:x86-windows=fail +simbody:arm64-windows=fail +simd(android)=fail +sleef:x86-windows=fail +sleepy-discord(android)=fail +spaceland:arm64-android=fail +spaceland:arm64-uwp=fail +spaceland:arm64-windows-static-md=fail +spaceland:arm64-windows=fail +spaceland:x64-android=fail +spaceland:x64-uwp=fail +stormlib(uwp)=fail +stxxl:arm-uwp=fail +stxxl:x64-uwp=fail +suitesparse-graphblas:x86-windows=fail # no InterlockedExchange64 with MSVC +systemc(uwp)=fail +telnetpp(android)=fail +telnetpp(uwp)=fail +tensorflow-cc(windows)=fail # tensorflow does not support VS2022 +tensorflow(windows)=fail # tensorflow does not support VS2022 +torch-th:arm-neon-android=cascade +torch-th:arm64-android=cascade +torch-th:arm64-uwp=fail +torch-th:arm64-windows-static-md=fail +torch-th:arm64-windows=fail +torch-th:x64-android=cascade +torch-th:x64-uwp=fail +torch-th:x64-windows-static=fail +treehopper:x64-windows-static=fail +usbmuxd:x64-windows-static-md=fail +v8:x64-osx=fail +v8(windows)=fail # the version of v8 we have in the repo doesn't support VS2022 +vectorclass:arm64-windows=fail +winreg:x64-linux=fail +winreg:x64-osx=fail +workflow:x64-uwp=fail +wxchartdir:x64-osx=fail +zeroc-ice(uwp)=fail # ZeroC doesn't provide ARM tagets in project files. +zint:x64-osx=fail +# Needs Java runtime +zookeeper:arm64-osx=fail +zookeeper:arm64-uwp=fail +zookeeper:arm64-windows-static-md=fail +zookeeper:arm64-windows=fail +zookeeper:x64-linux=fail +zookeeper:x64-osx=fail +zookeeper:x64-uwp=fail +zookeeper:x64-windows-release=fail +zookeeper:x64-windows-static-md=fail +zookeeper:x64-windows-static=fail +zookeeper:x64-windows=fail +zookeeper:x86-windows=fail +zyre:x64-windows-static-md=fail + + +# testing all features would be too slow: +aws-sdk-cpp[access-management,accessanalyzer,account,acm,acm-pca,alexaforbusiness,amp,amplify,amplifybackend,amplifyuibuilder,apigateway,apigatewaymanagementapi,apigatewayv2,appconfig,appconfigdata,appfabric,appflow,appintegrations,application-autoscaling,application-insights,applicationcostprofiler,appmesh,apprunner,appstream,appsync,arc-zonal-shift,athena,auditmanager,autoscaling,autoscaling-plans,awsmigrationhub,awstransfer,backup,backup-gateway,backupstorage,batch,billingconductor,braket,budgets,ce,chime,chime-sdk-identity,chime-sdk-media-pipelines,chime-sdk-meetings,chime-sdk-messaging,chime-sdk-voice,cleanrooms,cloud9,cloudcontrol,clouddirectory,cloudformation,cloudfront,cloudhsm,cloudhsmv2,cloudsearch,cloudsearchdomain,cloudtrail,cloudtrail-data,codeartifact,codebuild,codecatalyst,codecommit,codedeploy,codeguru-reviewer,codeguru-security,codeguruprofiler,codepipeline,codestar,codestar-connections,codestar-notifications,cognito-identity,cognito-idp,cognito-sync,comprehend,comprehendmedical,compute-optimizer,config,connect,connect-contact-lens,connectcampaigns,connectcases,connectparticipant,controltower,cur,customer-profiles,databrew,dataexchange,datapipeline,datasync,dax,detective,devicefarm,devops-guru,directconnect,discovery,dlm,dms,docdb,docdb-elastic,drs,ds,dynamodb,dynamodbstreams,ebs,ec2,ec2-instance-connect,ecr,ecr-public,ecs,eks,elastic-inference,elasticache,elasticbeanstalk,elasticfilesystem,elasticloadbalancing,elasticloadbalancingv2,elasticmapreduce,elastictranscoder,email,emr-containers,emr-serverless,entityresolution,es,eventbridge,events,evidently,finspace,finspace-data,firehose,fis,fms,forecast,forecastquery,frauddetector,fsx,gamelift,gamesparks,glacier,globalaccelerator,glue,grafana,greengrass,greengrassv2,groundstation,guardduty,health,healthlake,honeycode,iam,identity-management,identitystore,imagebuilder,importexport,inspector,inspector2,internetmonitor,iot,iot-data,iot-jobs-data,iot-roborunner,iot1click-devices,iot1click-projects,iotanalytics,iotdeviceadvisor,iotevents,iotevents-data,iotfleethub,iotfleetwise,iotsecuretunneling,iotsitewise,iotthingsgraph,iottwinmaker,iotwireless,ivs,ivs-realtime,ivschat,kafka,kafkaconnect,kendra,kendra-ranking,keyspaces,kinesis,kinesis-video-archived-media,kinesis-video-media,kinesis-video-signaling,kinesis-video-webrtc-storage,kinesisanalytics,kinesisanalyticsv2,kinesisvideo,kms,lakeformation,lambda,lex,lex-models,lexv2-models,lexv2-runtime,license-manager,license-manager-linux-subscriptions,license-manager-user-subscriptions,lightsail,location,logs,lookoutequipment,lookoutmetrics,lookoutvision,m2,machinelearning,macie,macie2,managedblockchain,managedblockchain-query,marketplace-catalog,marketplace-entitlement,marketplacecommerceanalytics,mediaconnect,mediaconvert,medialive,mediapackage,mediapackage-vod,mediapackagev2,mediastore,mediastore-data,mediatailor,medical-imaging,memorydb,meteringmarketplace,mgn,migration-hub-refactor-spaces,migrationhub-config,migrationhuborchestrator,migrationhubstrategy,mobile,monitoring,mq,mturk-requester,mwaa,neptune,neptunedata,network-firewall,networkmanager,nimble,oam,omics,opensearch,opensearchserverless,opsworks,opsworkscm,organizations,osis,outposts,panorama,payment-cryptography,payment-cryptography-data,pca-connector-ad,personalize,personalize-events,personalize-runtime,pi,pinpoint,pinpoint-email,pinpoint-sms-voice-v2,pipes,polly,pricing,privatenetworks,proton,qldb,qldb-session,queues,quicksight,ram,rbin,rds,rds-data,redshift,redshift-data,redshift-serverless,rekognition,resiliencehub,resource-explorer-2,resource-groups,resourcegroupstaggingapi,robomaker,rolesanywhere,route53,route53-recovery-cluster,route53-recovery-control-config,route53-recovery-readiness,route53domains,route53resolver,rum,s3,s3-crt,s3-encryption,s3control,s3outposts,sagemaker,sagemaker-a2i-runtime,sagemaker-edge,sagemaker-featurestore-runtime,sagemaker-geospatial,sagemaker-metrics,sagemaker-runtime,savingsplans,scheduler,schemas,sdb,secretsmanager,securityhub,securitylake,serverlessrepo,service-quotas,servicecatalog,servicecatalog-appregistry,servicediscovery,sesv2,shield,signer,simspaceweaver,sms,sms-voice,snow-device-management,snowball,sns,sqs,ssm,ssm-contacts,ssm-incidents,ssm-sap,sso,sso-admin,sso-oidc,states,storagegateway,sts,support,support-app,swf,synthetics,text-to-speech,textract,timestream-query,timestream-write,tnb,transcribe,transcribestreaming,transfer,translate,verifiedpermissions,voice-id,vpc-lattice,waf,waf-regional,wafv2,wellarchitected,wisdom,workdocs,worklink,workmail,workmailmessageflow,workspaces,workspaces-web,xray] = no-separate-feature-test +embree[backface-culling,compact-polys,filter-function,geometry-curve,geometry-grid,geometry-instance,geometry-point,geometry-quad,geometry-subdivision,geometry-triangle,geometry-user,ray-mask,ray-packets] = no-separate-feature-test +gdal[aws-ec2-windows,curl,expat,geos,gif,iconv,jpeg,lerc,libkml,libspatialite,libxml2,lzma,openjpeg,openssl,pcre2,png,qhull,sqlite3,webp,zstd] = no-separate-feature-test +google-cloud-cpp[accessapproval,accesscontextmanager,advisorynotifications,alloydb,apigateway,apigeeconnect,apikeys,appengine,artifactregistry,asset,assuredworkloads,automl,baremetalsolution,batch,beyondcorp,bigquery,bigtable,billing,binaryauthorization,certificatemanager,channel,cloudbuild,commerce,composer,confidentialcomputing,connectors,contactcenterinsights,container,containeranalysis,datacatalog,datafusion,datamigration,dataplex,dataproc,datastore,datastream,debugger,deploy,dialogflow-cx,dialogflow-es,discoveryengine,dlp,documentai,edgecontainer,eventarc,experimental-opentelemetry,experimental-storage-grpc,filestore,functions,gameservices,gkehub,gkemulticloud,grafeas,iam,iap,ids,iot,kms,language,logging,managedidentities,memcache,metastore,migrationcenter,monitoring,networkconnectivity,networkmanagement,networksecurity,notebooks,optimization,orgpolicy,osconfig,oslogin,policysimulator,policytroubleshooter,privateca,profiler,pubsub,rapidmigrationassessment,recommender,redis,resourcemanager,resourcesettings,retail,run,scheduler,secretmanager,securitycenter,servicecontrol,servicedirectory,servicemanagement,serviceusage,shell,spanner,speech,storage,storageinsights,storagetransfer,support,talent,tasks,texttospeech,tpu,trace,translate,video,videointelligence,vision,vmmigration,vmwareengine,vpcaccess,webrisk,websecurityscanner,workflows,workstations] = no-separate-feature-test +halide[target-aarch64,target-all,target-amdgpu,target-arm,target-d3d12compute,target-hexagon,target-metal,target-nvptx,target-opencl,target-opengl-compute,target-powerpc,target-riscv,target-webassembly,target-x86] = no-separate-feature-test +llvm[target-aarch64,target-all,target-amdgpu,target-arc,target-arm,target-avr,target-bpf,target-csky,target-directx,target-hexagon,target-lanai,target-loongarch,target-m68k,target-mips,target-msp430,target-nvptx,target-powerpc,target-riscv,target-sparc,target-spirv,target-systemz,target-ve,target-webassembly,target-x86,target-xcore,target-xtensa] = no-separate-feature-test +qtbase[doubleconversion,gui,sql,thread] = no-separate-feature-test # covered in many combinations +vtk[atlmfc,cgns,cuda,debugleaks,fontconfig,gdal,geojson,libharu,libtheora,mpi,netcdf,opengl,openmp,openvr,proj,python,qt,seacas,sql,tbb,utf8,vtkm] = no-separate-feature-test + +# cascade +3fd:x64-uwp = cascade +ableton-link[hut]:arm64-uwp = cascade +ableton-link[hut]:arm64-windows = cascade +ableton-link[hut]:x64-uwp = cascade +ace[xml-utils]:x64-linux = cascade +ace[xml-utils](osx) = cascade +activemq-cpp:arm64-windows = cascade +adios2:arm64-uwp = cascade +adios2:arm64-windows = cascade +adios2:x64-uwp = cascade +adios2[cuda](osx) = cascade +adios2[cuda,mpi]:x86-windows = cascade +adios2[python]:x64-uwp = cascade +alembic[hdf5]:arm64-windows = cascade +aliyun-oss-c-sdk:arm64-windows = cascade +allegro5:arm64-uwp = cascade +allegro5:x64-uwp = cascade +ampl-asl(uwp) = cascade +ampl-mp(uwp) = cascade +anari:arm64-uwp = cascade +anari:x64-uwp = cascade +apr-util:arm64-uwp = cascade +apr-util:arm64-windows = cascade +apr-util:x64-uwp = cascade +apsi[hexl,log4cplus,zeromq]:x64-uwp = cascade +apsi[log4cplus,zeromq]:arm64-uwp = cascade +aravis(uwp) = cascade +arb:arm64-uwp = cascade +arb:x64-uwp = cascade +armadillo:arm-neon-android=cascade +armadillo:arm64-android=cascade +armadillo:x64-android=cascade +arpack-ng:arm64-windows = cascade +arrayfire:x64-uwp = cascade +arrayfire[cuda]:x64-windows = cascade +arrayfire[cuda]:x64-windows-static = cascade +arrayfire[cuda]:x64-windows-static-md = cascade +arrayfire[opencl](uwp) = cascade +arrow:x64-uwp = cascade +arrow[cuda]:x64-linux = feature-fails +arrow[cuda]:x64-windows = feature-fails +arrow[cuda]:x64-windows-release = feature-fails +arrow[cuda]:x64-windows-static = feature-fails +arrow[cuda]:x64-windows-static-md = feature-fails +arrow[cuda](!(windows & x64 & !uwp & !xbox) & !(linux & x64) & !(linux & arm64)) = cascade +arrow[orc]:arm64-android = cascade +arrow[orc]:arm64-windows = feature-fails +arrow[orc]:x64-android = cascade +arrow[orc]:x64-windows = feature-fails +asio[coroutine]:arm64-uwp = cascade +asio[coroutine]:arm64-windows = cascade +asio[coroutine]:x64-uwp = cascade +async-mqtt:arm64-uwp = cascade +async-mqtt:x64-uwp = cascade +atk:arm64-uwp = cascade +atk:x64-uwp = cascade +atkmm:arm64-uwp = cascade +atkmm:x64-uwp = cascade +atkmm:x64-windows-static = cascade +atkmm:x64-windows-static-md = cascade +autodock-vina:arm64-uwp = cascade +autodock-vina:x64-uwp = cascade +avro-cpp:arm64-uwp = cascade +avro-cpp:x64-uwp = cascade +aws-checksums:x64-uwp = cascade +azmq:arm64-uwp = cascade +azmq:x64-uwp = cascade +azure-iot-sdk-c:arm64-uwp = cascade +azure-iot-sdk-c:x64-uwp = cascade +azure-messaging-eventhubs-checkpointstore-blob-cpp:x64-uwp = cascade +azure-messaging-eventhubs-cpp:arm64-uwp = cascade +azure-messaging-eventhubs-cpp:x64-uwp = cascade +azure-uamqp-c:arm64-uwp = cascade +azure-uamqp-c:x64-uwp = cascade +azure-uhttp-c:arm64-uwp = cascade +azure-uhttp-c:x64-uwp = cascade +azure-umqtt-c:arm64-uwp = cascade +azure-umqtt-c:x64-uwp = cascade +bit7z(uwp)=cascade +bitserializer[rapidyaml-archive]:arm64-uwp = cascade +bitserializer[rapidyaml-archive]:arm64-windows = cascade +bitserializer[rapidyaml-archive]:x64-uwp = cascade +bitserializer-rapidyaml:arm64-uwp = cascade +bitserializer-rapidyaml:arm64-windows = cascade +bitserializer-rapidyaml:x64-uwp = cascade +bloomberg-quantum:x64-uwp = cascade +boost[mpi]:arm64-uwp = cascade +boost[mpi]:arm64-windows = cascade +boost[mpi]:x64-uwp = cascade +boost-graph-parallel:arm64-windows = cascade +boost-mpi:arm64-windows = cascade +boost-odeint[mpi]:arm64-uwp = cascade +boost-odeint[mpi]:arm64-windows = cascade +boost-odeint[mpi]:x64-uwp = cascade +boost-property-map-parallel:arm64-windows = cascade +boost-python[python2](osx) = cascade +caffe2(osx) = cascade +cairo[fontconfig,gobject]:arm64-uwp = cascade +cairo[fontconfig,gobject]:x64-uwp = cascade +cairomm:arm64-uwp = cascade +cairomm:x64-uwp = cascade +cartographer:arm64-uwp = cascade +cartographer:x64-uwp = cascade +cgal:arm64-uwp = cascade +cgal:x64-uwp = cascade +cgal[qt]:arm64-windows = cascade +cgal[qt]:x64-windows = cascade +cgal[qt]:x86-windows = cascade +cgns[hdf5,mpi](uwp) = cascade +clblas:arm-neon-android=fail +clblas:arm64-android=fail +clblas:x64-android=fail +clblas:x64-uwp = cascade +clblast:arm64-uwp = cascade +clblast:x64-uwp = cascade +clfft:arm64-uwp = cascade +clfft:x64-uwp = cascade +clrng:x64-uwp = cascade +coin-or-cbc:arm64-uwp = cascade +coin-or-cbc:x64-uwp = cascade +coin-or-cgl:arm64-uwp = cascade +coin-or-cgl:x64-uwp = cascade +coin-or-clp:arm64-uwp = cascade +coin-or-clp:x64-uwp = cascade +coin-or-ipopt:arm64-osx = cascade +coin-or-ipopt:arm64-uwp = cascade +coin-or-ipopt:arm64-windows = cascade +coin-or-ipopt:x64-uwp = cascade +coin-or-ipopt:x86-windows = cascade +coin-or-osi:arm64-uwp = cascade +coin-or-osi:x64-uwp = cascade +collada-dom:arm64-uwp = cascade +collada-dom:x64-uwp = cascade +colmap:arm64-uwp = cascade +colmap:x64-uwp = cascade +colmap[cuda,cuda-redist]:x64-linux = feature-fails +colmap[cuda,cuda-redist](arm64 & osx) = cascade +cppkafka:arm64-uwp = cascade +cppkafka:x64-uwp = cascade +cppzmq:arm64-uwp = cascade +cppzmq:x64-uwp = cascade +cub(!((windows & x64 & !uwp) | (linux & x64) | (linux & arm64))) = cascade +cuda-api-wrappers(uwp | osx) = cascade +cutelyst2:arm64-uwp = cascade +cutelyst2:arm64-windows = cascade +cutelyst2:x64-uwp = cascade +cyclonedds-cxx:arm64-uwp = cascade +cyclonedds-cxx:arm64-windows = cascade +cyclonedds-cxx:x64-uwp = cascade +cyclonedds-cxx[idllib]:x64-windows-static = cascade +cyclonedds-cxx[idllib]:x64-windows-static-md = cascade +czmq:arm64-uwp = cascade +czmq:x64-uwp = cascade +darknet:arm64-uwp = cascade +darknet:x64-uwp = cascade +darknet[cuda,cudnn,full,opencv-cuda,opencv2-base,opencv2-cuda,opencv3-base,opencv3-cuda]:arm64-windows = cascade +darknet[cuda,cudnn,full,opencv-cuda,opencv2-base,opencv2-cuda,opencv3-base,opencv3-cuda]:x86-windows = cascade +darknet[cuda,cudnn,full,opencv-cuda,opencv2-cuda,opencv3-cuda](arm64 & osx) = cascade +darknet[cudnn,opencv2-base,opencv2-cuda,opencv3-base,opencv3-cuda,full]:x64-windows-static = cascade +darknet[cudnn,opencv2-base,opencv2-cuda,opencv3-base,opencv3-cuda,full]:x64-windows-static-md = cascade +darknet[cudnn,opencv2-cuda,opencv3-base,opencv3-cuda,full]:x64-windows = cascade +darknet[opencv2-base]:arm64-osx = cascade +darknet[opencv2-base,opencv2-cuda,opencv3-base,opencv3-cuda]:x64-linux = cascade +darknet[opencv3-base]:arm64-osx = cascade +dartsim(uwp) = cascade +daxa:x64-uwp = cascade +dcmtk[icu](uwp) = cascade +devil[openexr]:arm64-uwp = cascade +devil[openexr]:x64-uwp = cascade +directxtex[core,dx11,dx12,openexr,spectre,tools]:arm64-windows-static-md = combination-fails # error LNK2047: module contains C++ EH or complex EH metadata but was not compiled with /guard:ehcont +directxtex[openexr]:arm64-uwp = cascade +directxtex[openexr]:x64-uwp = cascade +directxtk[xaudio2redist](uwp) = cascade +directxtk12[xaudio2redist](uwp) = cascade +dlib[cuda]:arm64-windows = cascade +dlib[cuda]:x86-windows = cascade +dlib[cuda](osx) = cascade +dlib[cuda](uwp) = cascade +dv-processing:arm64-uwp = cascade +dv-processing:arm64-windows = cascade +dv-processing:x64-uwp = cascade +dv-processing[tools](uwp) = cascade +easycl:arm64-uwp = cascade +easycl:x64-uwp = cascade +ecal:x64-uwp = cascade +egl:x64-uwp = cascade +elements:arm64-uwp = cascade +elements:x64-uwp = cascade +etcd-cpp-apiv3:arm64-uwp = cascade +etcd-cpp-apiv3:x64-uwp = cascade +evpp:arm64-uwp = cascade +evpp:x64-uwp = cascade +faiss[gpu]:arm64-windows = cascade +fbgemm:arm64-osx = cascade +fbgemm:arm64-windows = cascade +fbthrift(android) = cascade +fcl:arm64-uwp = cascade +fcl:x64-uwp = cascade +ffmpeg[all-nonfree,fdk-aac](android) = cascade +ffmpeg[all,all-gpl](arm & android) = cascade +ffmpeg[all,all-gpl,all-nonfree,aom,ass,avisynthplus,dvdvideo,drawtext,fontconfig,fribidi,modplug,qsv,ssh,tesseract,x265](uwp) = cascade +ffmpeg[alsa](!linux) = cascade # alsa supports +ffmpeg[amf](osx) = cascade +ffmpeg[avisynthplus]:arm64-windows = cascade +ffmpeg[dav1d]:x86-windows = cascade +ffmpeg[ilbc]:arm64-uwp = cascade +ffmpeg[qsv](!linux & !windows & !(x64 & android)) = cascade +ffmpeg[tensorflow](windows) = cascade +fizz:arm64-windows = cascade +fizz:arm64-windows-static-md = cascade +fizz:x86-windows = cascade +fizz(android | uwp) = cascade +flann[cuda]:x86-windows = cascade +flann[cuda](osx) = cascade +flann[cuda,hdf5]:arm64-uwp = cascade +flann[cuda,hdf5]:arm64-windows = cascade +flann[cuda,hdf5]:x64-uwp = cascade +flashlight-cuda[fl,imgclass,lm,objdet,asr]:x64-linux = cascade +flashlight-sequence[cuda]:arm64-uwp = cascade +flashlight-sequence[cuda]:arm64-windows = cascade +flashlight-sequence[cuda]:x64-uwp = cascade +flashlight-sequence[cuda]:x86-windows = cascade +flashlight-sequence[cuda](osx) = cascade +flashlight-text[kenlm]:arm64-uwp = cascade +flashlight-text[kenlm]:arm64-windows = cascade +flashlight-text[kenlm]:x64-uwp = cascade +fluidsynth[pulseaudio](android | osx | windows) = cascade +folly[liburing]:arm64-osx = cascade +folly[liburing]:x64-windows = cascade +folly[liburing]:x64-windows-static = cascade +folly[liburing]:x64-windows-static-md = cascade +font-util:arm64-uwp = cascade +font-util:x64-uwp = cascade +freeglut(uwp)=cascade +freeimage:arm64-uwp = cascade +freeimage:x64-uwp = cascade +freeopcua:arm64-uwp = cascade +freeopcua:x64-uwp = cascade +freetds:x86-windows = cascade +freetype-gl:arm64-uwp = cascade +freetype-gl:x64-uwp = cascade +ftgl(uwp)=cascade +gamedev-framework:x64-uwp = cascade +gamma:arm64-uwp = cascade +gamma:x64-uwp = cascade +gazebo:x64-windows-static = cascade +gazebo:x64-windows-static-md = cascade +gazebo(arm | uwp | osx) = cascade +gdal[arrow,parquet](!(arm64 | x64)) = cascade +gdal[aws-ec2-windows](!windows) = cascade +gdcm2:arm64-uwp = cascade +gdcm2:arm64-windows = cascade +gdcm2:x64-uwp = cascade +gdk-pixbuf(uwp) = cascade +ginkgo[cuda]:arm64-uwp = cascade +ginkgo[cuda]:arm64-windows = cascade +ginkgo[cuda]:x64-uwp = cascade +ginkgo[cuda]:x86-windows = cascade +ginkgo[cuda](osx) = cascade +ginkgo[mpi]:x64-uwp = cascade +gl2ps:arm64-uwp = cascade +gl2ps:x64-uwp = cascade +glew:arm64-uwp = cascade +glew:x64-uwp = cascade +glog:arm64-uwp = cascade +glog:x64-uwp = cascade +glpk[dl]:arm64-osx = cascade +glpk[dl,mysql]:arm64-uwp = cascade +glpk[dl,mysql]:x64-uwp = cascade +glpk[dl,mysql,odbc]:x64-uwp = cascade +glpk[mysql]:arm64-osx = cascade +glpk[mysql]:arm64-windows = cascade +glpk[mysql]:x86-windows = cascade +glpk[odbc]:arm64-osx = cascade +glui:arm64-uwp = cascade +glui:x64-uwp = cascade +gmime:arm64-uwp = cascade +gmime:x64-uwp = cascade +gmsh[mpi]:arm64-windows = cascade +gmsh[mpi]:x64-windows = cascade +gmsh[mpi]:x64-windows-static = cascade +gmsh[mpi]:x64-windows-static-md = cascade +gmsh[mpi]:x86-windows = cascade +gobject-introspection(android) = cascade # from python3 +google-cloud-cpp-common:arm64-uwp = cascade +google-cloud-cpp-common:x64-uwp = cascade +google-cloud-cpp-spanner:arm64-uwp = cascade +google-cloud-cpp-spanner:x64-uwp = cascade +googleapis:arm64-uwp = cascade +googleapis:x64-uwp = cascade +gppanel:arm64-uwp = cascade +gppanel:x64-uwp = cascade +grantlee:arm64-uwp = cascade +grantlee:x64-uwp = cascade +graphene(uwp) = cascade +graphviz:arm64-uwp = cascade +graphviz:x64-uwp = cascade +grppi[tbb]:arm64-uwp = cascade +grppi[tbb]:x64-uwp = cascade +gst-rtsp-server:arm64-uwp = cascade +gst-rtsp-server:x64-uwp = cascade +gstreamer[asio](arm | !windows) = cascade +gstreamer[dc1394](android) = cascade +gstreamer[wayland](osx | windows) = cascade +gtk:arm64-uwp = cascade +gtk:arm64-windows = cascade +gtk:x64-uwp = cascade +gtkmm:arm64-windows = cascade +gtkmm:x64-windows-static = cascade +gtkmm:x64-windows-static-md = cascade +gts:arm64-uwp = cascade +gts:x64-uwp = cascade +gtsam:arm64-uwp = cascade +gtsam:x64-uwp = cascade +gz-common(uwp) = cascade +gz-common5(uwp) = cascade +gz-fuel-tools8:x64-uwp = cascade +gz-gui7(android | arm | uwp) = cascade +gz-physics6:x64-uwp = cascade +gz-physics6(arm|android) = cascade +gz-plugin2:x64-uwp = cascade +gz-rendering7:x64-uwp = cascade +gz-rendering7(arm|android) = cascade +gz-sensors7:x64-uwp = cascade +gz-sensors7(arm | android) = cascade +gz-transport12:x64-uwp = cascade +h5py-lzf:arm64-uwp = cascade +h5py-lzf:arm64-windows = cascade +h5py-lzf:x64-uwp = cascade +hareflow:arm64-uwp = cascade +hareflow:x64-uwp = cascade +hareflow:x64-windows-static = cascade +hashids:arm64-uwp = cascade +hashids:x64-uwp = cascade +hdf5[parallel](android) = cascade +hdf5[parallel](arm64 & windows) = cascade +hexl:x64-uwp = cascade +highfive:arm64-uwp = cascade +highfive:x64-uwp = cascade +highfive[opencv]:arm64-windows = cascade +hikogui:x64-uwp = cascade +hpx[cuda](!(windows & x64 & !uwp & !xbox) & !(linux & x64) & !(linux & arm64)) = cascade +hpx[cuda](osx) = cascade +hpx[mpi](windows & !(x64 | x86))=cascade +hyperscan:x64-uwp = cascade +hypodermic:arm64-uwp = cascade +hypodermic:x64-uwp = cascade +hypre:arm64-uwp = cascade +hypre:arm64-windows = cascade +hypre:x64-uwp = cascade +hypre:x86-windows = cascade +ideviceinstaller:x64-uwp = cascade +idevicerestore:arm64-uwp = cascade +idevicerestore:arm64-windows = cascade +idevicerestore:x64-uwp = cascade +idevicerestore:x64-windows-static = cascade +idevicerestore:x64-windows-static-md = cascade +ignition-common1:arm64-osx = cascade +ignition-common1:arm64-uwp = cascade +ignition-common1:x64-uwp = cascade +ignition-common3:arm64-uwp = cascade +ignition-common3:x64-uwp = cascade +ignition-fuel-tools1:arm64-osx = cascade +ignition-fuel-tools1:arm64-uwp = cascade +ignition-fuel-tools1:x64-linux = cascade +ignition-fuel-tools1:x64-uwp = cascade +ignition-fuel-tools4:arm64-osx = cascade +ignition-fuel-tools4:arm64-uwp = cascade +ignition-fuel-tools4:arm64-windows = cascade +ignition-fuel-tools4:x64-uwp = cascade +ignition-plugin1:arm64-uwp = cascade +ignition-plugin1:x64-uwp = cascade +ignition-transport4:arm64-uwp = cascade +ignition-transport4:arm64-windows = cascade +ignition-transport4:x64-uwp = cascade +ignition-transport8:arm64-osx = cascade +ignition-transport8:arm64-uwp = cascade +ignition-transport8:arm64-windows = cascade +ignition-transport8:x64-uwp = cascade +ignition-transport9:arm64-osx = cascade +ignition-transport9:arm64-uwp = cascade +ignition-transport9:arm64-windows = cascade +ignition-transport9:x64-uwp = cascade +imgui[allegro5-binding]:arm64-windows = cascade +imgui[allegro5-binding,glfw-binding,glut-binding]:arm64-uwp = cascade +imgui[allegro5-binding,glfw-binding,glut-binding]:x64-uwp = cascade +imgui[vulkan-binding]:x64-uwp = cascade +imgui-sfml:arm-neon-android=fail +imgui-sfml:arm64-android=fail +imgui-sfml:arm64-uwp = cascade +imgui-sfml:x64-android=fail +imgui-sfml:x64-uwp = cascade +io2d:arm64-uwp = cascade +io2d:x64-uwp = cascade +irrxml:arm64-osx = cascade +irrxml:arm64-uwp = cascade +irrxml:arm64-windows = cascade +irrxml:x64-uwp = cascade +ismrmrd:x64-uwp = cascade +itay-grudev-singleapplication(uwp) = cascade +itk[cuda,cufftw]:x86-windows = cascade +itk[cuda,cufftw](android | osx) = cascade +itk[tools]:x86-windows = cascade +itk(uwp) = cascade +ixwebsocket[mbedtls,ssl]:arm64-uwp = cascade +ixwebsocket[mbedtls,ssl]:x64-uwp = cascade +jaeger-client-cpp:x64-uwp = cascade +jkqtplotter(uwp) = cascade +jsonnet:arm64-uwp = cascade +jsonnet:arm64-windows = cascade +jsonnet:x64-uwp = cascade +kd-soap:arm64-uwp = cascade +kd-soap:x64-uwp = cascade +kddockwidgets:arm64-uwp = cascade +kddockwidgets:x64-uwp = cascade +kealib(uwp) = cascade +kenlm:x64-uwp = cascade +kf5archive:arm64-uwp = cascade +kf5archive:arm64-windows = cascade +kf5archive:x64-uwp = cascade +kf5attica:arm64-uwp = cascade +kf5attica:arm64-windows = cascade +kf5attica:x64-uwp = cascade +kf5attica:x64-windows = cascade +kf5attica:x86-windows = cascade +kf5bookmarks:arm64-uwp = cascade +kf5bookmarks:arm64-windows = cascade +kf5bookmarks:x64-uwp = cascade +kf5bookmarks:x64-windows = cascade +kf5bookmarks:x86-windows = cascade +kf5codecs:arm64-uwp = cascade +kf5codecs:arm64-windows = cascade +kf5codecs:x64-uwp = cascade +kf5codecs:x64-windows = cascade +kf5codecs:x86-windows = cascade +kf5completion:arm64-uwp = cascade +kf5completion:arm64-windows = cascade +kf5completion:x64-uwp = cascade +kf5completion:x64-windows = cascade +kf5completion:x86-windows = cascade +kf5config:arm64-uwp = cascade +kf5config:arm64-windows = cascade +kf5config:x64-uwp = cascade +kf5config:x64-windows = cascade +kf5config:x86-windows = cascade +kf5configwidgets:arm64-uwp = cascade +kf5configwidgets:arm64-windows = cascade +kf5configwidgets:x64-uwp = cascade +kf5configwidgets:x64-windows = cascade +kf5configwidgets:x86-windows = cascade +kf5coreaddons:arm64-uwp = cascade +kf5coreaddons:arm64-windows = cascade +kf5coreaddons:x64-uwp = cascade +kf5coreaddons:x64-windows = cascade +kf5coreaddons:x86-windows = cascade +kf5crash:arm64-uwp = cascade +kf5crash:arm64-windows = cascade +kf5crash:x64-uwp = cascade +kf5crash:x64-windows = cascade +kf5crash:x86-windows = cascade +kf5dbusaddons:arm64-uwp = cascade +kf5dbusaddons:arm64-windows = cascade +kf5dbusaddons:x64-uwp = cascade +kf5dbusaddons:x64-windows = cascade +kf5dbusaddons:x86-windows = cascade +kf5declarative:arm64-uwp = cascade +kf5declarative:arm64-windows = cascade +kf5declarative:x64-uwp = cascade +kf5declarative:x64-windows = cascade +kf5declarative:x86-windows = cascade +kf5declarative[opengl]:x64-windows-static = cascade +kf5diagram:arm64-uwp = cascade +kf5diagram:arm64-windows = cascade +kf5diagram:x64-uwp = cascade +kf5guiaddons:arm64-uwp = cascade +kf5guiaddons:arm64-windows = cascade +kf5guiaddons:x64-uwp = cascade +kf5guiaddons:x64-windows = cascade +kf5guiaddons:x86-windows = cascade +kf5guiaddons[wayland]:arm64-osx = cascade +kf5guiaddons[wayland]:x64-windows-static = cascade +kf5guiaddons[wayland]:x64-windows-static-md = cascade +kf5holidays:arm64-uwp = cascade +kf5holidays:arm64-windows = cascade +kf5holidays:x64-uwp = cascade +kf5holidays:x64-windows = cascade +kf5holidays:x86-windows = cascade +kf5i18n:arm64-uwp = cascade +kf5i18n:arm64-windows = cascade +kf5i18n:x64-uwp = cascade +kf5i18n:x64-windows = cascade +kf5i18n:x86-windows = cascade +kf5iconthemes:arm64-uwp = cascade +kf5iconthemes:arm64-windows = cascade +kf5iconthemes:x64-uwp = cascade +kf5iconthemes:x64-windows = cascade +kf5iconthemes:x86-windows = cascade +kf5itemmodels:arm64-uwp = cascade +kf5itemmodels:arm64-windows = cascade +kf5itemmodels:x64-uwp = cascade +kf5itemmodels:x64-windows = cascade +kf5itemmodels:x86-windows = cascade +kf5itemviews:arm64-uwp = cascade +kf5itemviews:arm64-windows = cascade +kf5itemviews:x64-uwp = cascade +kf5itemviews:x64-windows = cascade +kf5itemviews:x86-windows = cascade +kf5jobwidgets:arm64-uwp = cascade +kf5jobwidgets:arm64-windows = cascade +kf5jobwidgets:x64-uwp = cascade +kf5jobwidgets:x64-windows = cascade +kf5jobwidgets:x86-windows = cascade +kf5kcmutils:arm64-uwp = cascade +kf5kcmutils:arm64-windows = cascade +kf5kcmutils:x64-uwp = cascade +kf5kcmutils:x64-windows = cascade +kf5kcmutils:x86-windows = cascade +kf5kio:arm64-uwp = cascade +kf5kio:arm64-windows = cascade +kf5kio:x64-uwp = cascade +kf5kio:x64-windows = cascade +kf5kio:x86-windows = cascade +kf5newstuff:arm64-uwp = cascade +kf5newstuff:arm64-windows = cascade +kf5newstuff:x64-uwp = cascade +kf5newstuff:x64-windows = cascade +kf5newstuff:x86-windows = cascade +kf5notifications:arm64-uwp = cascade +kf5notifications:arm64-windows = cascade +kf5notifications:x64-uwp = cascade +kf5notifications:x64-windows = cascade +kf5notifications:x86-windows = cascade +kf5package:arm64-uwp = cascade +kf5package:arm64-windows = cascade +kf5package:x64-uwp = cascade +kf5package:x64-windows = cascade +kf5package:x86-windows = cascade +kf5parts:arm64-uwp = cascade +kf5parts:arm64-windows = cascade +kf5parts:x64-uwp = cascade +kf5parts:x64-windows = cascade +kf5parts:x86-windows = cascade +kf5plotting:arm64-uwp = cascade +kf5plotting:arm64-windows = cascade +kf5plotting:x64-uwp = cascade +kf5plotting:x64-windows = cascade +kf5plotting:x86-windows = cascade +kf5service:arm64-uwp = cascade +kf5service:arm64-windows = cascade +kf5service:x64-uwp = cascade +kf5service:x64-windows = cascade +kf5service:x86-windows = cascade +kf5solid:arm64-uwp = cascade +kf5solid:arm64-windows = cascade +kf5solid:x64-uwp = cascade +kf5solid:x64-windows = cascade +kf5solid:x86-windows = cascade +kf5sonnet:arm64-uwp = cascade +kf5sonnet:arm64-windows = cascade +kf5sonnet:x64-uwp = cascade +kf5sonnet:x64-windows = cascade +kf5sonnet:x86-windows = cascade +kf5syntaxhighlighting:arm64-uwp = cascade +kf5syntaxhighlighting:arm64-windows = cascade +kf5syntaxhighlighting:x64-uwp = cascade +kf5syntaxhighlighting:x64-windows = cascade +kf5syntaxhighlighting:x86-windows = cascade +kf5texteditor:x64-uwp = cascade +kf5textwidgets:arm64-uwp = cascade +kf5textwidgets:arm64-windows = cascade +kf5textwidgets:x64-uwp = cascade +kf5textwidgets:x64-windows = cascade +kf5textwidgets:x86-windows = cascade +kf5wallet:arm64-uwp = cascade +kf5wallet:arm64-windows = cascade +kf5wallet:x64-uwp = cascade +kf5wallet:x64-windows = cascade +kf5wallet:x86-windows = cascade +kf5widgetsaddons:arm64-uwp = cascade +kf5widgetsaddons:arm64-windows = cascade +kf5widgetsaddons:x64-uwp = cascade +kf5widgetsaddons:x64-windows = cascade +kf5widgetsaddons:x86-windows = cascade +kf5windowsystem:arm64-uwp = cascade +kf5windowsystem:arm64-windows = cascade +kf5windowsystem:x64-uwp = cascade +kf5windowsystem:x64-windows = cascade +kf5windowsystem:x86-windows = cascade +kf5xmlgui:arm64-uwp = cascade +kf5xmlgui:arm64-windows = cascade +kf5xmlgui:x64-uwp = cascade +kf5xmlgui:x64-windows = cascade +kf5xmlgui:x86-windows = cascade +lapack-reference:arm64-uwp = cascade +lapack-reference:arm64-windows = cascade +lapack-reference:x64-uwp = cascade +lcm:arm64-uwp = cascade +lcm:x64-uwp = cascade +lemon:arm64-uwp = cascade +lemon:x64-uwp = cascade +lensfun:x64-uwp = cascade +libadwaita:arm64-uwp = cascade +libadwaita:arm64-windows = cascade +libadwaita:x64-uwp = cascade +libadwaita:x64-windows-static = cascade +libadwaita:x64-windows-static-md = cascade +libalkimia:arm64-uwp = cascade +libalkimia:arm64-windows = cascade +libalkimia:x64-uwp = cascade +libalkimia:x64-windows = cascade +libalkimia:x86-windows = cascade +libalkimia[webengine]:arm64-osx = cascade +libalkimia[webengine](static) = cascade +libass:arm64-uwp = cascade +libass:x64-uwp = cascade +libavif[aom](uwp)=cascade +libavif[dav1d]:x86-windows=cascade +libcaer:x64-uwp = cascade +libcanberra[alsa]:arm64-osx = cascade +libcroco:arm64-uwp = cascade +libcroco:x64-uwp = cascade +libdmx:arm64-uwp = cascade +libdmx:x64-uwp = cascade +libe57:arm64-uwp = cascade +libe57:x64-uwp = cascade +libe57format:arm64-uwp = cascade +libe57format:x64-uwp = cascade +libfontenc:arm64-uwp = cascade +libfontenc:x64-uwp = cascade +libfreenect2:arm64-uwp = cascade +libfreenect2:x64-uwp = cascade +libfreenect2[openni2]:arm64-osx = cascade +libfreenect2[openni2]:arm64-windows = cascade +libfreenect2[openni2]:x64-linux = cascade +libfreenect2[openni2]:x64-windows-static = cascade +libftdi:arm64-osx = cascade +libftdi:arm64-uwp = cascade +libftdi:x64-linux = cascade +libftdi:x64-uwp = cascade +libftdi:x64-windows-static = cascade +libftdi:x64-windows-static-md = cascade +libftdi1:arm64-uwp = cascade +libftdi1:x64-uwp = cascade +libgd[fontconfig]:arm64-uwp = cascade +libgd[fontconfig]:x64-uwp = cascade +libgxps:arm64-uwp = cascade +libgxps:x64-uwp = cascade +libheif(uwp) = cascade +libice:arm64-uwp = cascade +libice:x64-uwp = cascade +libideviceactivation:arm64-uwp = cascade +libideviceactivation:x64-uwp = cascade +libigl[cgal,embree,glfw,imgui,opengl,png]:arm64-uwp = cascade +libigl[cgal,embree,glfw,imgui,opengl,png]:x64-uwp = cascade +libigl[embree]:arm64-windows = cascade +libimobiledevice:arm64-uwp = cascade +libimobiledevice:x64-uwp = cascade +libirecovery:x64-uwp = cascade +liblas:x64-uwp = cascade +liblas[tools]:x64-osx=feature-fails +liblas[tools](android)=feature-fails +liblsquic:arm64-uwp = cascade +liblsquic:arm64-windows = cascade +liblsquic:x64-uwp = cascade +libmagic(uwp)=cascade +libmupdf:arm64-uwp = cascade +libmupdf:x64-uwp = cascade +libnice:arm64-uwp = cascade +libnice:x64-uwp = cascade +libnice-gst:arm64-uwp = cascade +libnice-gst:x64-uwp = cascade +libnick:arm64-osx = fail +libnick:x64-linux = fail +libnick:x64-osx = fail +libodb-boost:x64-linux = cascade +libodb-mysql:arm64-uwp = cascade +libodb-mysql:x64-linux = cascade +libodb-mysql:x64-uwp = cascade +libodb-mysql:x86-windows = cascade +libodb-pgsql:arm64-uwp = cascade +libodb-pgsql:x64-linux = cascade +libodb-pgsql:x64-uwp = cascade +libodb-sqlite:x64-linux = cascade +libosmium:arm64-uwp = cascade +libosmium:x64-uwp = cascade +libp7-baical:arm64-osx = cascade +libp7-baical:arm64-uwp = cascade +libp7-baical:arm64-windows = cascade +libp7-baical:x64-uwp = cascade +libpmemobj-cpp[benchmark]:arm64-osx = cascade +libpmemobj-cpp[benchmark]:arm64-uwp = cascade +libpmemobj-cpp[benchmark]:arm64-windows = cascade +libpmemobj-cpp[benchmark]:x64-linux = cascade +libpmemobj-cpp[benchmark]:x64-uwp = cascade +libpmemobj-cpp[benchmark]:x64-windows-static = cascade +libpmemobj-cpp[benchmark]:x86-windows = cascade +libpqxx:arm64-uwp = cascade +libpqxx:x64-uwp = cascade +libqglviewer:arm64-uwp = cascade +libqglviewer:x64-uwp = cascade +libqrencode[tool]:arm64-uwp = cascade +libqrencode[tool]:x64-uwp = cascade +libraqm:arm64-uwp = cascade +libraqm:x64-uwp = cascade +librdkafka[sasl](android | (windows & (static | arm | x86))) = cascade +librsvg:arm64-uwp = cascade +librsvg:x64-uwp = cascade +libsm:arm64-uwp = cascade +libsm:x64-uwp = cascade +libtorch:x86-windows = cascade +libtorch(uwp | (arm & windows)) = cascade +libwebp[all,vwebp](uwp) = cascade +libwebp[vwebp](android) = cascade +libwebp[vwebp-sdl](android | osx | uwp | (windows & static)) = cascade +libx11:arm64-uwp = cascade +libx11:x64-uwp = cascade +libxau:arm64-uwp = cascade +libxau:x64-uwp = cascade +libxaw:arm64-osx = cascade +libxaw:arm64-uwp = cascade +libxaw:arm64-windows = cascade +libxaw:x64-uwp = cascade +libxcomposite:arm64-uwp = cascade +libxcomposite:x64-uwp = cascade +libxdamage:arm64-uwp = cascade +libxdamage:x64-uwp = cascade +libxdmcp:arm64-uwp = cascade +libxdmcp:x64-uwp = cascade +libxext:arm64-uwp = cascade +libxext:x64-uwp = cascade +libxfixes:arm64-uwp = cascade +libxfixes:x64-uwp = cascade +libxfont:arm64-uwp = cascade +libxfont:x64-uwp = cascade +libxft:arm64-uwp = cascade +libxft:x64-uwp = cascade +libxi:arm64-uwp = cascade +libxi:x64-uwp = cascade +libxinerama:arm64-uwp = cascade +libxinerama:x64-uwp = cascade +libxkbcommon:arm64-uwp = cascade +libxkbcommon:x64-uwp = cascade +libxkbfile:arm64-uwp = cascade +libxkbfile:x64-uwp = cascade +libxmu:arm64-uwp = cascade +libxmu:arm64-windows = cascade +libxmu:x64-uwp = cascade +libxpm:arm64-uwp = cascade +libxpm:x64-uwp = cascade +libxpresent:arm64-uwp = cascade +libxpresent:x64-uwp = cascade +libxrandr:arm64-uwp = cascade +libxrandr:x64-uwp = cascade +libxrender:arm64-uwp = cascade +libxrender:x64-uwp = cascade +libxres:arm64-uwp = cascade +libxres:x64-uwp = cascade +libxscrnsaver:arm64-uwp = cascade +libxscrnsaver:x64-uwp = cascade +libxt:arm64-uwp = cascade +libxt:x64-uwp = cascade +libxtst:arm64-uwp = cascade +libxtst:x64-uwp = cascade +libxv:arm64-uwp = cascade +libxv:x64-uwp = cascade +libxxf86vm:arm64-uwp = cascade +libxxf86vm:x64-uwp = cascade +libzim:arm64-uwp = cascade +libzim:x64-uwp = cascade +llama-cpp(uwp) = cascade +llgl:arm-neon-android=fail +llgl:arm64-android=fail +llgl:x64-android=fail +llgl[vulkan]:x64-linux=feature-fails +llgl[vulkan](osx) = cascade # no vulkan sdk installed +luajit:arm-neon-android = cascade +luasec:x64-linux = cascade +luv:arm64-windows = cascade +magma(uwp | osx) = cascade +magnum[distancefieldconverter,fontconverter,gl-info,imageconverter,magnumfont,magnumfontconverter,opengltester,sceneconverter,shaders,text]:x64-uwp = cascade +magnum[glfwapplication]:arm64-uwp = cascade +magnum[glfwapplication]:x64-uwp = cascade +magnum[glxcontext,windowlessglxapplication](android)=feature-fails +magnum[vk]:x64-uwp = cascade +magnum-extras:arm64-uwp = cascade +magnum-extras:x64-uwp = cascade +magnum-extras[ui]:x64-uwp = cascade +magnum-integration:arm64-uwp = cascade +magnum-integration:x64-uwp = cascade +magnum-plugins:arm64-uwp = cascade +magnum-plugins:x64-uwp = cascade +magnum-plugins[meshoptimizersceneconverter]:x64-uwp = cascade +mapnik:arm64-uwp = cascade +mapnik:x64-uwp = cascade +marble:x64-uwp = cascade +mathgl[hdf5,qt5]:arm64-windows = cascade +matio[hdf5,mat73]:arm64-uwp = cascade +matio[hdf5,mat73]:arm64-windows = cascade +matio[hdf5,mat73]:x64-uwp = cascade +mdl-sdk:x64-uwp = cascade +mesa[default-features,gles1,gles2,offscreen,opengl]:x64-uwp = cascade +mesa[llvm]:x64-uwp = cascade +mfl:arm64-uwp = cascade +mfl:x64-uwp = cascade +milerius-sfml-imgui:arm64-uwp = cascade +milerius-sfml-imgui:x64-uwp = cascade +minc[minc1](android) = cascade +minc(uwp) = cascade +mnn[cuda]:x64-windows = cascade +mnn[cuda]:x64-windows-static = cascade +mnn[cuda]:x64-windows-static-md = cascade +mnn[cuda]:x86-windows = cascade +mnn[vulkan](osx) = cascade # no vulkan sdk installed +modern-cpp-kafka:arm64-uwp = cascade +modern-cpp-kafka:x64-uwp = cascade +mongo-cxx-driver:arm64-uwp = cascade +mongo-cxx-driver:x64-uwp = cascade +moos-essential:arm64-uwp = cascade +moos-essential:x64-uwp = cascade +moos-essential:x64-windows-static = cascade +moos-ui:arm64-uwp = cascade +moos-ui:x64-uwp = cascade +moos-ui:x64-windows-static = cascade +mpi:arm64-windows = cascade +mpi:x86-windows = cascade +msix:arm64-uwp = cascade +msix:x64-uwp = cascade +msquic[0-rtt](android)=cascade +mujoco:arm64-uwp = cascade +mujoco:x64-uwp = cascade +netcdf-cxx4:arm64-uwp = cascade +netcdf-cxx4:arm64-windows = cascade +netcdf-cxx4:x64-uwp = cascade +ngtcp2[gnutls]:arm64-uwp=cascade +ngtcp2[gnutls]:arm64-windows-static-md=cascade +ngtcp2[gnutls]:arm64-windows=cascade +ngtcp2[gnutls,wolfssl]:x64-uwp=cascade +ngtcp2[wolfssl]:arm64-uwp=cascade +nmap:arm64-uwp = cascade +nmap:arm64-windows = cascade +nmap:x64-uwp = cascade +nmap:x64-windows-static = cascade +nmap:x64-windows-static-md = cascade +nmap:x86-windows = cascade +nng[mbedtls](uwp) = cascade +nngpp:arm64-uwp = cascade +nngpp:x64-uwp = cascade +nss:x64-uwp = cascade +nss:x64-windows-static = cascade +numcpp[python]:arm64-windows = cascade +nuspell:arm64-uwp = cascade +nuspell:x64-uwp = cascade +nvtt[cuda]:x86-windows = cascade +nvtt[cuda](osx) = cascade +oatpp-mbedtls:arm64-uwp = cascade +oatpp-mbedtls:x64-uwp = cascade +oatpp-postgresql:arm64-uwp = cascade +oatpp-postgresql:x64-uwp = cascade +ogre:x64-uwp = cascade +ogre[assimp,freeimage,openexr]:arm64-uwp = cascade +ogre[csharp](windows)=feature-fails # .NET workloads not installed in the build lab +ogre[d3d9](windows)=feature-fails # DirectX 9 SDK not installed in the build lab +ogre[python]=feature-fails # broken on all test platforms right now +ogre-next:arm64-uwp = cascade +ogre-next:arm64-windows = cascade +ogre-next:x64-uwp = cascade +ogre-next:x64-windows-static = cascade +ogre-next[csharp]:arm64-osx = cascade +ogre-next[d3d9]:arm64-osx = cascade +ogre-next[java]:arm64-osx = cascade +ogre-next[python]:arm64-osx = cascade +ompl:arm64-uwp = cascade +ompl:x64-uwp = cascade +omplapp:arm64-uwp = cascade +omplapp:x64-uwp = cascade +onnx-optimizer:arm64-uwp = cascade +onnx-optimizer:x64-uwp = cascade +onnx-optimizer[pybind11]:arm64-windows = cascade +onnx-optimizer[pybind11]:x64-linux = cascade +onnx-optimizer[pybind11]:x64-windows-static = cascade +onnx-optimizer[pybind11]:x64-windows-static-md = cascade +onnx-optimizer[pybind11]:x86-windows = cascade +openal-soft[pipewire](!linux) = cascade +openal-soft[pulseaudio](!linux) = cascade +opencascade[vtk,freeimage](uwp) = cascade +opencsg(uwp)=cascade +opencv[cuda,cudnn](osx) = cascade +opencv[cuda,cudnn,dc1394,dnn-cuda,freetype,gdcm,gstreamer,gtk,halide,openexr,opengl,ovis,python,qt,sfm,tbb,vtk]:arm64-uwp = cascade +opencv[cuda,cudnn,dc1394,dnn-cuda,freetype,gdcm,gstreamer,gtk,openexr,opengl,ovis,qt,sfm,tbb,vtk]:x64-uwp = cascade +opencv[cuda,cudnn,dc1394,dnn-cuda,gdcm,gtk,vtk]:arm64-windows = cascade +opencv[cuda,cudnn,dc1394,dnn-cuda,gtk]:x86-windows = cascade +opencv[dc1394,cudnn,dnn-cuda,gtk]:x64-windows = cascade +opencv[dc1394,cudnn,dnn-cuda,gtk]:x64-windows-static-md = cascade +opencv[dnn-cuda](osx) = cascade +opencv[gtk]:arm64-osx = cascade +opencv[halide,dc1394,cudnn,dnn-cuda,gtk]:x64-windows-static = cascade +opencv[halide,python]:x64-uwp = cascade +opencv2[cuda](osx) = cascade +opencv2[cuda,dc1394]:x86-windows = cascade +opencv2[dc1394]:x64-windows = cascade +opencv2[dc1394,gtk]:x64-windows-static = cascade +opencv2[dc1394,gtk]:x64-windows-static-md = cascade +opencv3[cuda](osx) = cascade +opencv3[cuda,dc1394]:x86-windows = cascade +opencv3[cuda,dc1394,freetype,gdcm,gstreamer,gtk,halide,openexr,opengl,ovis,python,qt,sfm,tbb,vtk]:arm64-uwp = cascade +opencv3[cuda,dc1394,freetype,gdcm,gstreamer,gtk,halide,openexr,opengl,ovis,python,qt,sfm,tbb,vtk]:x64-uwp = cascade +opencv3[cuda,dc1394,gdcm,gtk,halide,qt,vtk]:arm64-windows = cascade +opencv3[dc1394,cuda]:x64-windows = cascade +opencv3[dc1394,cuda,gtk]:x64-windows-static-md = cascade +opencv3[dc1394,halide,cuda,gtk]:x64-windows-static = cascade +opencv4[aravis](uwp | xbox) = cascade +opencv4[cuda](!((windows & x64 & !uwp & !xbox) | (linux & x64) | (linux & arm64))) = cascade +opencv4[cuda,cudnn](osx) = cascade +opencv4[cuda,cudnn,dc1394,dnn-cuda]:x86-windows = cascade +opencv4[dnn,halide](osx) = combination-fails +opencv4[halide](android | (windows & staticcrt) | uwp | (arm & windows))=cascade +openvino[npu]:x64-linux=cascade # dependency level-zero not supported +pmdk:x64-uwp=cascade + +opencv4[cuda,cudnn,dc1394,dnn-cuda,freetype,gdcm,gstreamer,openexr,opengl,ovis,python,qt,sfm,tbb,vtk]:arm64-uwp = cascade +opencv4[cuda,cudnn,dc1394,dnn-cuda,freetype,gdcm,gstreamer,openexr,ovis,python,qt,sfm,tbb,vtk]:x64-uwp = cascade +opencv4[cuda,cudnn,dc1394,dnn-cuda,vtk]:arm64-windows = cascade +opencv4[cudnn](!((windows & x64 & !uwp & !xbox) | (linux & x64) | (linux & arm64)) | !((windows & x64 & !uwp) | (linux & x64) | (linux & arm64))) = cascade +opencv4[dc1394](windows) = cascade +opencv4[dnn-cuda](!((windows & x64 & !uwp & !xbox) | (linux & x64) | (linux & arm64)) | !((windows & x64 & !uwp) | (linux & x64) | (linux & arm64))) = cascade + +opencv4[dnn-cuda](osx) = cascade +opencv4[freetype](uwp) = cascade +opencv4[gdcm](uwp) = cascade +opencv4[gstreamer](uwp | xbox) = cascade +opencv4[opencl](uwp) = cascade +opencv4[openexr](uwp) = cascade +opencv4[opengl](uwp | xbox) = cascade +opencv4[openvino](windows & arm) = cascade +opencv4[qt](uwp | ios | xbox) = cascade +opencv4[sfm](uwp) = cascade +opencv4[tbb](uwp) = cascade +opencv4[vtk]:arm64-windows-static-md = cascade +opencv4[vtk](uwp | xbox) = cascade +openimageio:arm64-uwp = cascade +openimageio:x64-uwp = cascade +openmama:arm64-uwp = cascade +openmama:arm64-windows = cascade +openmama:x64-uwp = cascade +openmama:x64-windows-static = cascade +openmvg[opencv,software](arm & windows) = cascade +openmvg(uwp) = cascade +openmvs:arm64-uwp = cascade +openmvs:arm64-windows = cascade +openmvs:x64-linux = cascade +openmvs:x64-uwp = cascade +openmvs[cuda]:arm64-osx = cascade +openmvs[cuda]:x86-windows = cascade +openmvs[cuda](osx) = cascade +openni2:arm64-osx = cascade +openni2:arm64-windows = cascade +openni2:x64-linux = cascade +openscap[crypto,util,python](arm & windows) = cascade +openscap(uwp) = cascade +openslide(windows & !native) = cascade +opensubdiv[cuda]:x86-windows = cascade +opensubdiv[dx]:x64-linux = cascade +opentelemetry-cpp[jaeger,prometheus]:arm64-uwp = cascade +opentelemetry-cpp[jaeger,prometheus]:x64-uwp = cascade +openturns(uwp) = cascade +openvdb:x64-uwp = cascade +openvdb[ax](!osx & !linux) = cascade +openvdb[ax](osx | linux) = feature-fails +openvdb[nanovdb]:arm64-uwp = cascade +openvdb[nanovdb](osx) = cascade +openvino:arm64-uwp = cascade +openvino:x64-uwp = cascade +openvms[cuda](osx) = cascade +openvpn3:arm64-uwp = cascade +openvpn3:x64-uwp = cascade +osg[nvtt](android | arm) = cascade +osg[sdl1](android | osx) = cascade +osmanip:arm64-uwp = cascade +osmanip:x64-uwp = cascade +pagmo2:arm64-uwp = cascade +pagmo2:x64-uwp = cascade +paho-mqttpp3:arm64-uwp = cascade +paho-mqttpp3:x64-uwp = cascade +pango:arm64-uwp = cascade +pango:x64-uwp = cascade +pangolin[openni2]:arm64-osx = cascade +pangolin[openni2]:x64-linux = cascade +pangolin[openni2,realsense,uvc]:arm64-windows = cascade +pangolin[openni2,uvc]:x64-windows-static = cascade +pangolin[pybind11]:arm64-osx=feature-fails +pangolin[pybind11]:arm64-windows-static-md=feature-fails +pangolin[pybind11]:arm64-windows=feature-fails +pangolin[pybind11]:x64-linux=feature-fails +pangolin[pybind11]:x64-osx=feature-fails +pangolin[pybind11]:x64-windows-release=feature-fails +pangolin[pybind11]:x64-windows-static-md=feature-fails +pangolin[pybind11]:x64-windows=feature-fails +pangolin[pybind11]:x86-windows=feature-fails +pangolin[uvc]:x64-windows = cascade +pangolin[uvc]:x64-windows-static-md = cascade +pangolin[uvc]:x86-windows = cascade +pangomm:x64-uwp = cascade +pangomm:x64-windows-static = cascade +pangomm:x64-windows-static-md = cascade +parallelstl:arm64-uwp = cascade +parallelstl:x64-uwp = cascade +paraview[cuda]:x64-linux = cascade +paraview[cuda](osx) = cascade +paraview[cuda,mpi,python,vtkm]:x86-windows = cascade +paraview[python]:x64-windows-static-md = cascade +paraview[python,all-modules]:x64-windows-static = cascade +paraview(uwp) = cascade +parmetis:arm64-windows = cascade +parmetis(uwp) = cascade +parquet:arm64-uwp = cascade +parquet:arm64-windows = cascade +parquet:x64-uwp = cascade +parquet:x86-windows = cascade +pbc:x64-windows-static = cascade +pbc:x64-windows-static-md = cascade +pcapplusplus:arm64-uwp = cascade +pcapplusplus:arm64-windows = cascade +pcapplusplus:x64-uwp = cascade +pcapplusplus:x64-windows-static = cascade +pcapplusplus:x64-windows-static-md = cascade +pcapplusplus:x86-windows = cascade +pcl[apps]:arm64-osx = cascade +pcl[cuda](osx) = cascade +pcl[openni2]:arm64-osx = cascade +pcl[openni2,apps]:x64-linux = cascade +pcl[pcap]:x64-windows-static-md = cascade +pcl[pcap,openni2,apps]:x64-windows-static = cascade +pcl(uwp) = cascade +pdal-c:arm64-uwp = cascade +pdal-c:arm64-windows = cascade +pdal-c:x64-uwp = cascade +pdal(uwp) = cascade +pixel:arm64-uwp = cascade +pixel:x64-uwp = cascade +plplot:x64-uwp = cascade +plplot[x11]:arm64-windows = cascade +plplot[x11]:x64-windows = cascade +plplot[x11]:x64-windows-static = cascade +plplot[x11]:x64-windows-static-md = cascade +plplot[x11]:x86-windows = cascade +poco[mysql]:x86-windows = cascade +prometheus-cpp[pull]:arm64-uwp = cascade +prometheus-cpp[pull]:arm64-windows = cascade +prometheus-cpp[pull]:x64-uwp = cascade +protobuf-c[test](uwp) = cascade +ptyqt:arm64-windows = cascade +qca:arm64-uwp = cascade +qca:x64-uwp = cascade +qcoro[dbus]:x64-windows-static = cascade +qcoro(android) = cascade +qcoro(uwp) = cascade +qcustomplot:arm64-uwp = cascade +qcustomplot:x64-uwp = cascade +qhttpengine:arm64-windows = cascade +qlementine-icons(uwp) = cascade +qscintilla:arm64-uwp = cascade +qscintilla:x64-uwp = cascade +qt-advanced-docking-system:arm64-uwp = cascade +qt-advanced-docking-system:x64-uwp = cascade +qt(uwp) = cascade +qt3d(uwp) = cascade +qt5:arm64-uwp = cascade +qt5:arm64-windows = cascade +qt5:x64-uwp = cascade +qt5[all,wayland,webengine]:x86-windows = cascade +qt5[wayland]:arm64-osx = cascade +qt5[wayland,webengine]:x64-windows = cascade +qt5[wayland,webengine]:x64-windows-static = cascade +qt5[wayland,webengine]:x64-windows-static-md = cascade +qt5[webengine]:arm64-osx = cascade +qt5[webengine]:x64-linux = cascade +qt5-3d:arm64-uwp = cascade +qt5-3d:x64-uwp = cascade +qt5-activeqt:arm64-uwp = cascade +qt5-activeqt:x64-uwp = cascade +qt5-base(uwp) = cascade +qt5-charts:arm64-uwp = cascade +qt5-charts:x64-uwp = cascade +qt5-connectivity:arm64-uwp = cascade +qt5-connectivity:x64-uwp = cascade +qt5-datavis3d:arm64-uwp = cascade +qt5-datavis3d:x64-uwp = cascade +qt5-declarative:arm64-uwp = cascade +qt5-declarative:x64-uwp = cascade +qt5-gamepad:arm64-uwp = cascade +qt5-gamepad:x64-uwp = cascade +qt5-graphicaleffects:arm64-uwp = cascade +qt5-graphicaleffects:x64-uwp = cascade +qt5-imageformats:arm64-uwp = cascade +qt5-imageformats:x64-uwp = cascade +qt5-location:arm64-uwp = cascade +qt5-location:x64-uwp = cascade +qt5-mqtt:arm64-uwp = cascade +qt5-mqtt:x64-uwp = cascade +qt5-multimedia:arm64-uwp = cascade +qt5-multimedia:x64-uwp = cascade +qt5-networkauth:arm64-uwp = cascade +qt5-networkauth:x64-uwp = cascade +qt5-purchasing:arm64-uwp = cascade +qt5-purchasing:x64-uwp = cascade +qt5-quickcontrols:arm64-uwp = cascade +qt5-quickcontrols:x64-uwp = cascade +qt5-quickcontrols2:arm64-uwp = cascade +qt5-quickcontrols2:x64-uwp = cascade +qt5-remoteobjects:arm64-uwp = cascade +qt5-remoteobjects:x64-uwp = cascade +qt5-script:arm64-uwp = cascade +qt5-script:x64-uwp = cascade +qt5-scxml:arm64-uwp = cascade +qt5-scxml:arm64-windows = cascade +qt5-scxml:x64-uwp = cascade +qt5-sensors:arm64-uwp = cascade +qt5-sensors:x64-uwp = cascade +qt5-serialbus:arm64-uwp = cascade +qt5-serialbus:x64-uwp = cascade +qt5-serialport:arm64-uwp = cascade +qt5-serialport:x64-uwp = cascade +qt5-speech:arm64-uwp = cascade +qt5-speech:x64-uwp = cascade +qt5-svg:arm64-uwp = cascade +qt5-svg:x64-uwp = cascade +qt5-tools:arm64-uwp = cascade +qt5-tools:x64-uwp = cascade +qt5-translations:arm64-uwp = cascade +qt5-translations:x64-uwp = cascade +qt5-virtualkeyboard:arm64-uwp = cascade +qt5-virtualkeyboard:x64-uwp = cascade +qt5-webchannel:arm64-uwp = cascade +qt5-webchannel:x64-uwp = cascade +qt5-webengine((arm & windows) | uwp) = cascade +qt5-webglplugin:arm64-uwp = cascade +qt5-webglplugin:x64-uwp = cascade +qt5-websockets:arm64-uwp = cascade +qt5-websockets:x64-uwp = cascade +qt5-webview:arm64-uwp = cascade +qt5-webview:x64-uwp = cascade +qt5-winextras:arm64-uwp = cascade +qt5-winextras:x64-uwp = cascade +qt5-xmlpatterns:arm64-uwp = cascade +qt5-xmlpatterns:x64-uwp = cascade +qt5compat:arm64-uwp = cascade +qt5compat:x64-uwp = cascade +qt5compat[iconv]:x64-uwp = cascade +qtactiveqt:arm64-uwp = cascade +qtactiveqt:x64-uwp = cascade +qtapplicationmanager:arm64-uwp = cascade +qtapplicationmanager:x64-uwp = cascade +qtbase[dbus](android) = cascade +qtbase[sql-mysql](android) = cascade +qtcharts:arm64-uwp = cascade +qtcharts:x64-uwp = cascade +qtcoap:arm64-uwp = cascade +qtcoap:x64-uwp = cascade +qtconnectivity:arm64-uwp = cascade +qtconnectivity:x64-uwp = cascade +qtdatavis3d:arm64-uwp = cascade +qtdatavis3d:x64-uwp = cascade +qtdeclarative:arm64-uwp = cascade +qtdeclarative:x64-uwp = cascade +qtdoc:arm64-uwp = cascade +qtdoc:x64-uwp = cascade +qtgraphs(uwp) = cascade +qtgrpc:arm64-uwp = cascade +qtgrpc:x64-uwp = cascade +qthttpserver:arm64-uwp = cascade +qthttpserver:x64-uwp = cascade +qtimageformats:arm64-uwp = cascade +qtimageformats:x64-uwp = cascade +qtinterfaceframework:arm64-uwp = cascade +qtinterfaceframework:x64-uwp = cascade +qtkeychain:arm64-uwp = cascade +qtkeychain:x64-uwp = cascade +qtkeychain[translations]:x64-windows = cascade +qtkeychain[translations]:x86-windows = cascade +qtkeychain-qt6:arm64-uwp = cascade +qtkeychain-qt6:x64-uwp = cascade +qtlanguageserver:arm64-uwp = cascade +qtlanguageserver:x64-uwp = cascade +qtlocation:arm64-uwp = cascade +qtlocation:x64-uwp = cascade +qtlottie:arm64-uwp = cascade +qtlottie:x64-uwp = cascade +qtmqtt:arm64-uwp = cascade +qtmqtt:x64-uwp = cascade +qtmultimedia:arm64-uwp = cascade +qtmultimedia:x64-uwp = cascade +qtmultimedia[gstreamer]:x64-linux=options +qtnetworkauth:arm64-uwp = cascade +qtnetworkauth:x64-uwp = cascade +qtopcua:arm64-uwp = cascade +qtopcua:x64-uwp = cascade +qtopcua[open62541](android)=feature-fails +qtpositioning:arm64-uwp = cascade +qtpositioning:x64-uwp = cascade +qtquick3d:arm64-uwp = cascade +qtquick3d:x64-uwp = cascade +qtquick3dphysics:arm64-uwp = cascade +qtquick3dphysics:x64-uwp = cascade +qtquickcontrols2:arm64-uwp = cascade +qtquickcontrols2:x64-uwp = cascade +qtquicktimeline:arm64-uwp = cascade +qtquicktimeline:x64-uwp = cascade +qtremoteobjects:arm64-uwp = cascade +qtremoteobjects:x64-uwp = cascade +qtscxml:arm64-uwp = cascade +qtscxml:x64-uwp = cascade +qtsensors:arm64-uwp = cascade +qtsensors:x64-uwp = cascade +qtserialbus:arm64-uwp = cascade +qtserialbus:x64-uwp = cascade +qtserialport:arm64-uwp = cascade +qtserialport:x64-uwp = cascade +qtshadertools:arm64-uwp = cascade +qtshadertools:x64-uwp = cascade +qtspeech:arm64-uwp = cascade +qtspeech:x64-uwp = cascade +qtsvg:arm64-uwp = cascade +qtsvg:x64-uwp = cascade +qttools:arm64-uwp = cascade +qttools:x64-uwp = cascade +qttranslations:arm64-uwp = cascade +qttranslations:x64-uwp = cascade +qtvirtualkeyboard:arm64-uwp = cascade +qtvirtualkeyboard:x64-uwp = cascade +qtwebchannel:arm64-uwp = cascade +qtwebchannel:x64-uwp = cascade +qtwebsockets:arm64-uwp = cascade +qtwebsockets:x64-uwp = cascade +qtwebview:arm64-uwp = cascade +qtwebview:x64-uwp = cascade +qtwebview[webengine]:x86-windows = cascade +quazip:arm64-uwp = cascade +quazip:x64-uwp = cascade +quickfast:arm64-uwp = cascade +quickfast:x64-uwp = cascade +qwt:arm64-uwp = cascade +qwt:x64-uwp = cascade +qwtw:x64-uwp = cascade +qwtw:x64-windows = cascade +realsense2[openni2]:arm64-uwp = cascade +realsense2[openni2]:arm64-windows = cascade +realsense2[openni2]:x64-uwp = cascade +realsense2[openni2]:x64-windows-static = cascade +realsense2[openni2](!windows) = cascade # cpkg-tool-lessmsi[core] only supports native & windows +redis-plus-plus[async-std,async]:arm64-uwp = cascade +redis-plus-plus[async-std,async]:x64-uwp = cascade +rerun-sdk:x64-uwp = cascade +restc-cpp:arm64-uwp = cascade +restc-cpp:arm64-windows = cascade +restc-cpp:x64-uwp = cascade +restc-cpp[threaded-ctx]:x64-uwp = cascade +rhasheq:arm64-uwp = cascade +rhasheq:x64-uwp = cascade +rioki-glow:arm64-uwp = cascade +rioki-glow:x64-uwp = cascade +ripper37-libbase[wx](android) = cascade +ripper37-libbase(uwp) = cascade +rkcommon:x64-uwp = cascade +rmqcpp(windows | android) = cascade +rsocket:arm64-uwp = cascade +rsocket:arm64-windows = cascade +rsocket:x64-uwp = cascade +rsocket:x86-windows = cascade +rtabmap:arm64-windows = cascade +rtabmap[k4w2,openni2](arm | !windows) = cascade +rtabmap[opencv-cuda](!x64 | android | osx) = cascade +rtabmap(uwp) = cascade +ryml:arm64-uwp = cascade +ryml:arm64-windows = cascade +ryml:x64-uwp = cascade +salome-configuration:arm64-uwp = cascade +salome-configuration:x64-uwp = cascade +salome-med-fichier:arm64-uwp = cascade +salome-med-fichier:arm64-windows = cascade +salome-med-fichier:x64-uwp = cascade +salome-medcoupling(arm | uwp | !(linux | windows)) = cascade +sassc:arm64-uwp = cascade +sassc:x64-uwp = cascade +sdformat10:x64-windows-static = cascade +sdformat13:x64-windows-static = cascade +sdformat6:x64-windows-static = cascade +sdformat9:x64-windows-static = cascade +sdl1-mixer(android) = cascade +sdl1-net(android | osx | uwp) = cascade +sdl2-mixer[fluidsynth,libmodplug,opusfile](uwp) = cascade +sdl2-mixer-ext[fluidsynth,libmodplug,opusfile](uwp) = cascade +sdl2-ttf[harfbuzz]:arm64-uwp = cascade +sdl2-ttf[harfbuzz]:x64-uwp = cascade +seacas:arm64-uwp = cascade +seacas:x64-uwp = cascade +seal[hexl]:arm64-uwp = cascade +seal[hexl]:arm64-windows = cascade +seal[hexl]:x64-uwp = cascade +seal[hexl]:x86-windows = cascade +seal[hexl](osx) = cascade +sfgui:arm64-uwp = cascade +sfgui:x64-uwp = cascade +shiftmedia-libgnutls:x64-uwp = cascade +shiva:arm64-uwp = cascade +shiva:arm64-windows = cascade +shiva:x64-uwp = cascade +shiva-sfml:arm64-uwp = cascade +shiva-sfml:arm64-windows = cascade +shiva-sfml:x64-uwp = cascade +shiva-sfml:x64-windows-static = cascade +shiva-sfml:x64-windows-static-md = cascade +skia[default-features]:arm64-windows = cascade +skia[freetype]:x64-uwp = cascade +sleepy-discord[websocketpp]:arm64-uwp = cascade +sleepy-discord[websocketpp]:x64-uwp = cascade +soci[mysql]:x86-windows = cascade +soci[mysql,postgresql]:arm64-uwp = cascade +soci[mysql,postgresql]:x64-uwp = cascade +soem:arm64-windows = cascade +soem:x64-windows-static = cascade +soem:x64-windows-static-md = cascade +soem:x86-windows = cascade +spdlog[benchmark]:arm64-uwp = cascade +spdlog[benchmark]:x64-uwp = cascade +sqlcipher:arm64-windows = cascade +sqlitecpp[sqlcipher]:arm64-osx = cascade +sqlitecpp[sqlcipher]:arm64-uwp = cascade +sqlitecpp[sqlcipher]:arm64-windows = cascade +sqlitecpp[sqlcipher]:x64-linux = cascade +sqlitecpp[sqlcipher]:x64-uwp = cascade +sqlitecpp[sqlcipher]:x64-windows-static = cascade +sqlitecpp[sqlcipher]:x64-windows-static-md = cascade +sqlpp11[mariadb,mysql,postgresql]:arm64-uwp = cascade +sqlpp11[mariadb,mysql,postgresql]:x64-uwp = cascade +sqlpp11[mysql]:x86-windows = cascade +sqlpp11-connector-mysql[mariadb,mysql]:arm64-uwp = cascade +sqlpp11-connector-mysql[mariadb,mysql]:x64-uwp = cascade +sqlpp11-connector-mysql[mysql]:arm64-windows = cascade +sqlpp11-connector-mysql[mysql]:x64-windows-static = cascade +sqlpp11-connector-mysql[mysql]:x64-windows-static-md = cascade +sqlpp11-connector-mysql[mysql]:x86-windows = cascade +srpc:arm64-uwp = cascade +srpc:x64-uwp = cascade +symengine[llvm]:arm64-windows = cascade +tensorpipe[cuda](osx) = cascade +tgbot-cpp:arm64-uwp = cascade +tgbot-cpp:x64-uwp = cascade +tgui[sdl2,sfml,tool](uwp) = cascade +theia(osx) = cascade +thor:arm64-uwp = cascade +thor:x64-uwp = cascade +thrift:arm64-uwp = cascade +thrift:x64-uwp = cascade +treehopper:arm64-uwp = cascade +treehopper:x64-uwp = cascade +triton:x64-uwp = cascade +ttauri:x64-uwp = cascade +ttauri:x64-windows-static = cascade +ttauri:x64-windows-static-md = cascade +uchardet[tool]:arm64-uwp = cascade +uchardet[tool]:x64-uwp = cascade +usbmuxd:x64-uwp = cascade +usockets:arm64-uwp = cascade +usockets:x64-uwp = cascade +usockets[network](osx) = cascade +uvw:arm64-uwp = cascade +uvw:x64-uwp = cascade +uwebsockets:arm64-uwp = cascade +uwebsockets:x64-uwp = cascade +v-hacd[opencl]:x64-uwp = cascade +vk-bootstrap:arm64-uwp = cascade +vk-bootstrap:x64-uwp = cascade +volk:arm64-uwp = cascade +volk:x64-uwp = cascade +vsg:x64-uwp = cascade +vsgxchange:arm64-uwp = cascade +vsgxchange:x64-uwp = cascade +vtk[all]:x64-windows-static = cascade # hdf5[parallel] only supports !staticcrt +vtk[all](android) = cascade +vtk[all](arm64 & windows) = cascade # vtk-m[core] only supports !x86 & !uwp & !(arm & windows) +vtk[all](uwp) = cascade +vtk[all,cuda,mpi,vtkm]:x86-windows = cascade +vtk[cuda](arm64 & windows) = cascade # cuda[core] only supports (windows & x64 & !uwp & !xbox) | (linux & x64) | (linux & arm64) +vtk[cuda](osx) = cascade +vtk[gdal](android) = cascade +vtk[gdal](uwp) = cascade # gdal[core] only supports !uwp, hdf5[core] only supports !uwp, opengl[core] only supports !uwp & !xbox +vtk[ioocct](uwp) = cascade # hdf5[core] only supports !uwp, opengl[core] only supports !uwp & !xbox +vtk[mpi](arm64 & windows) = cascade # vtk-m[core] only supports !x86 & !uwp & !(arm & windows) +vtk[netcdf](uwp) = cascade # hdf5[core] only supports !uwp, opengl[core] only supports !uwp & !xbox +vtk[openvr]:arm64-osx = cascade +vtk[openvr]:x64-windows-static = cascade +vtk[openvr](arm64 & windows) = cascade # openvr[core] only supports !(arm | uwp | osx | android) +vtk[paraview](android) = cascade +vtk[python](osx) = cascade +vtk[python](uwp) = cascade # hdf5[core] only supports !uwp, opengl[core] only supports !uwp & !xbox, python3[core] only supports !uwp & !mingw +vtk[qt](uwp) = cascade # dbus[core] only supports !uwp & !staticcrt & !android & !ios, harfbuzz[core] only supports !uwp, hdf5[core] only supports !uwp, libpq[core] only supports !uwp, opengl[core] only supports !uwp & !xbox, qtbase[core] only supports !uwp +vtk[seacas](uwp) = cascade # hdf5[core] only supports !uwp, opengl[core] only supports !uwp & !xbox +vtk[vtkm](arm64 & windows) = cascade # vtk-m[core] only supports !x86 & !uwp & !(arm & windows) +vtk-dicom(uwp) = cascade +# cuda[core] only supports (windows & x64 & !uwp & !xbox) | (linux & x64) | (linux & arm64) +vtk-m[cuda](arm64 & windows) = cascade +vtk-m[cuda](osx) = cascade +vtk(uwp) = cascade # hdf5[core] only supports !uwp +vulkan[tools](osx) = cascade +vulkan-sdk-components[tools]( osx | staticcrt) = cascade +wampcc:x64-uwp = cascade +wangle:arm64-uwp = cascade +wangle:arm64-windows = cascade +wangle:x64-uwp = cascade +wangle:x86-windows = cascade +wayland[force-build](!native) = cascade # needs wayland[force-build](native) +wayland-protocols[force-build] = cascade # needs wayland[force-build](native) +wayland-protocols(windows | osx) = cascade # needs wayland +# ignore `wpilib` build errors until upgrade to a new release version +wpilib:arm-neon-android = fail # requires full c++20 support +wpilib:arm64-android = fail # requires full c++20 support +wpilib:arm64-osx = fail +wpilib:arm64-uwp = cascade +wpilib:arm64-windows = fail +wpilib:arm64-windows-static-md = fail +wpilib:x64-android = fail # requires full c++20 support +wpilib:x64-linux = fail +wpilib:x64-osx = fail +wpilib:x64-uwp = cascade +wpilib:x64-windows = fail +wpilib:x64-windows-release = fail +wpilib:x64-windows-static = fail +wpilib:x64-windows-static-md = fail +wpilib:x86-windows = fail +wt:arm64-uwp = cascade +wt:x64-uwp = cascade +wxchartdir:arm64-windows = cascade +wxchartdir(uwp) = cascade +wxcharts:arm64-uwp = cascade +wxcharts:x64-uwp = cascade +wxwidgets[webview]:arm64-osx = cascade +wxwidgets[webview](!windows) = cascade +xbitmaps:arm64-uwp = cascade +xbitmaps:x64-uwp = cascade +xcb:arm64-uwp = cascade +xcb:x64-uwp = cascade +xcb-image:arm64-uwp = cascade +xcb-image:x64-uwp = cascade +xcb-keysyms:arm64-uwp = cascade +xcb-keysyms:x64-uwp = cascade +xcb-proto:arm64-uwp = cascade +xcb-proto:x64-uwp = cascade +xcb-render-util:arm64-uwp = cascade +xcb-render-util:x64-uwp = cascade +xcb-util:arm64-uwp = cascade +xcb-util:x64-uwp = cascade +xcb-util-errors:arm64-uwp = cascade +xcb-util-errors:x64-uwp = cascade +xcb-util-wm:arm64-uwp = cascade +xcb-util-wm:x64-uwp = cascade +xeus:arm64-uwp = cascade +xeus:x64-uwp = cascade +xproto:arm64-uwp = cascade +xproto:x64-uwp = cascade +xqilla:arm64-uwp = cascade +xqilla:x64-uwp = cascade +xtensor[tbb]:arm64-uwp = cascade +xtensor[tbb]:x64-uwp = cascade +xtrans:arm64-uwp = cascade +xtrans:x64-uwp = cascade +yasm-tool:arm64-uwp = cascade +yasm-tool:x64-uwp = cascade +zeroc-ice[icediscovery]:x64-windows-static = cascade +zeroc-ice[icediscovery]:x64-windows-static-md = cascade +zeromq[websockets-secure]:arm64-windows = cascade +zeromq[websockets-secure]:x64-windows = cascade +zeromq[websockets-secure]:x64-windows-static = cascade +zeromq[websockets-secure]:x64-windows-static-md = cascade +zeromq[websockets-secure]:x86-windows = cascade +zyre:arm64-uwp = cascade +zyre:x64-uwp = cascade + +# failures +# adios2[zfp](osx) = feature-fails # requires openmp (works with right setup) +# adios2[core,mpi,zfp](osx) = combination-fails # mpi not found +ableton-link[hut](linux) = feature-fails # libportaudiocpp0 must be installed in ci. See https://github.com/microsoft/vcpkg/pull/32144 +adios2[python](!uwp) = feature-fails # Could NOT find Python (missing: Python_NumPy_INCLUDE_DIRS NumPy) +arrayfire[opencl](windows & !uwp) = feature-fails # build errror: See https://github.com/microsoft/vcpkg/issues/33464 +ashes[core](windows) = combination-fails # CMake Error: INSTALL(EXPORT) given unknown export "AshesRenderers". One render backend must be selected +awlib[graphics](osx) = feature-fails # Broken code. See https://github.com/microsoft/vcpkg/issues/39849 +cgns[core,fortran,hdf5,legacy,lfs,mpi,tests](osx | linux) = combination-fails # ["fortran","hdf5","mpi"]: Could NOT find MPI (missing: MPI_Fortran_FOUND) (found version "3.1") +cgns[fortran](windows | android) = feature-fails # No fortran compiler installed +coroutine(osx) = fail # requires c++20 +crashrpt(windows) = fail # precompiled header errors. See https://github.com/microsoft/vcpkg/issues/33470 +ctbench(osx) = fail # requires C++ 20 +date[remote-api](uwp) = feature-fails # error C2065: 'FOLDERID_ProgramFiles': undeclared identifier. See https://github.com/microsoft/vcpkg/issues/33610 +dcmtk[core,iconv,icu,openssl,png,tiff,tools,xml2,zlib](osx) = combination-fails # missing symbols from libtiff. See https://github.com/microsoft/vcpkg/issues/33512 +dcmtk[iconv](arm64 & windows & !uwp) = feature-fails # try_run +dcmtk[tools](arm64 & windows & !uwp) = feature-fails # try_run +dcmtk(android) = fail # try_run +dcmtk(uwp) = fail # Please set the C++ runtime location (required for running applications targeting Windows). See https://github.com/microsoft/vcpkg/issues/35112 +dmlc[openmp](osx) = feature-fails # No openmp on osx +dv-processing[tools](osx) = feature-fails # Broke with compiler version. See https://github.com/microsoft/vcpkg/issues/39852 +ffmpeg[all,all-gpl](x64 & android) = feature-fails +ffmpeg[nvcodec,ffplay,opengl](android) = feature-fails +fftw3[openmp](osx) = feature-fails # waits for https://github.com/microsoft/vcpkg/pull/30833 +fftw3[openmp](windows & !static) = feature-fails # Linker missing symbols. See https://github.com/microsoft/vcpkg/issues/33322 +flashlight-cpu = fail # CMake Error: INSTALL(EXPORT) given unknown export "flashlightTargets". See https://github.com/microsoft/vcpkg/issues/32098 +flashlight-sequence[openmp](osx) = feature-fails # No openmp on osx +gapp(android) = fail # requires c++20 +gapp(osx) = fail # requires c++20 +gegl(osx) = fail # meson bug on osx. See https://github.com/microsoft/vcpkg/issues/44411 +geogram[graphics] = feature-fails # imgui not found. See https://github.com/microsoft/vcpkg/issues/32421 +ginkgo[openmp](osx) = feature-fails # No openmp on osx +ginkgo[openmp](windows) = feature-fails # needs openmp 3.0 support but msvc only supports openmp 2.0 +glib-networking[openssl, gnutls] = options # You have to select exactly one ssl backend +google-cloud-cpp[storagetransfer](osx) = feature-fails # See https://github.com/microsoft/vcpkg/issues/32149 +graphviz(osx) = fail # CMake configure error. See https://github.com/microsoft/vcpkg/issues/44414 +grpc[codegen](uwp) = feature-fails # linker errors. See https://github.com/microsoft/vcpkg/issues/33622 +gstreamer[nvcodec](windows) = feature-fails +gstreamer[vulkan](android | windows) = feature-fails +gstreamer[x11](android | osx) = feature-fails # no system X11 in CI +hdf5[fortran](android | windows) = feature-fails # No fortran compiler +hdf5[fortran,parallel](linux | osx) = options # Fortran disabled in port openmpi +hdf5[threadsafe](android) = feature-fails # pthread_setcancelstate +hunspell[tools](windows) = feature-fails # error C2065: 'mode_t': undeclared identifier. See https://github.com/microsoft/vcpkg/issues/30633 +igraph[openmp](osx) = feature-fails # openmp setup needed +imgui[core,sdl2-binding](uwp) = options # sdl2-binding fails to build when build together with docking-experimental => exclude from all +irrlicht[tools](osx) = feature-fails # X11 installation required +itk[core,vtk,python](!static & !(arm & windows & !uwp)) = combination-fails +itk[cuda]:x64-linux = feature-fails +ixwebsocket[core,mbedtls,openssl,sectransp,ssl] = options # you can only choose one ssl backend or none +kissfft[openmp](osx) = feature-fails # No openmp on osx +ktx[tools](uwp) = feature-fails # build error. See https://github.com/microsoft/vcpkg/issues/33687 +lapack-reference[blas-select,cblas,noblas] = options # Cannot built feature 'cblas' together with feature 'noblas'. cblas requires blas. +lapack-reference(android)=fail # no fortran compiler +libalkimia[tools](linux) = feature-fails # link errors. See https://github.com/microsoft/vcpkg/issues/32361 +libcanberra[core] = combination-fails # configure: error: *** No backend enabled. *** +libcanberra[core](osx) = combination-fails # see https://github.com/microsoft/vcpkg/issues/31032 +libcanberra[core,defaults,gstreamer,gtk3,null](osx) = combination-fails # fatal error: 'gdk/gdkx.h' file not found +libcanberra[gtk3](osx) = combination-fails # No package 'systemd' found # See https://github.com/microsoft/vcpkg/issues/31032 +libcanberra[oss](osx) = feature-fails # oss not installed +libcanberra[pulse](osx) = feature-fails # pulseaudio not installed +libgit2[core,openssl,winhttp,sectransp,mbedtls,ssl] = options # only one TLS backend is allowed +libgit2[pcre,pcre2] = options # have to select pcre xor pcre2 +libgit2[winhttp](!windows) = feature-fails +libgwenhywfar[qt5](osx) = feature-fails # See https://github.com/microsoft/vcpkg/issues/31216 +libofx[ofx2qif,ofxdump](osx) = feature-fails # gettext link error. See https://github.com/microsoft/vcpkg/issues/33043 +libopnmidi[gens-emulator] = options # You have to select at least one emulator +libproxy[bindings-csharp](!windows & !osx) = feature-fails # No C# compiler installed (brew install mono on osx) +libpsl[libidn2,libicu] = options # "At least one of libidn2 and libicu should be selected." +libraw[openmp](osx) = feature-fails # requires openmp (works with right setup) +libsbml[expat, libxml2] = options # have to select excatly one xml lib(they are features) +libssh[core,openssl,mbedtls] = options # we have to select feature openssl or mbedtls +libwebp[anim,cwebp,dwebp,extras,gif2webp,img2webp,info,mux,libwebpmux,nearlossless,swap16bitcsp,unicode,vwebp]:x64-android = no-separate-feature-test # Compiler crash without simd +libwebp[anim,cwebp,dwebp,extras,img2webp](uwp) = feature-fails # linker error. See https://github.com/microsoft/vcpkg/issues/33603 +llama-cpp[tools](arm & windows & !uwp) = feature-fails # unresolved symbols +llvm[core,flang] = options # exclude flang from all since it is not compatible with enable enable-eh +llvm[enable-mlir-python-bindings](osx) = feature-fails # Could NOT find Python3 (missing: Development Development.Module Development.Embed) (found version "3.12"). Same as https://github.com/microsoft/vcpkg/issues/34779 +llvm[libcxxabi](windows) = feature-fails # see https://github.com/microsoft/vcpkg/issues/31038 +magnum-plugins[meshoptimizersceneconverter](!uwp) = feature-fails # see https://github.com/microsoft/vcpkg/issues/31112 +mesa[egl](!windows) = feature-fails # ERROR: Problem encountered: EGL requires dri, haiku, or windows +mesa[llvm](!uwp) = feature-fails # ERROR: Neither a subproject directory nor a llvm.wrap file was found. (llvm-config found: NO) +mesa(osx) = fail # See https://github.com/microsoft/vcpkg/issues/39782 +ms-quic(windows) = fail # fixed upstream. See https://github.com/microsoft/vcpkg/issues/29459 +msdfgen[core,extensions,geometry-preprocessing,openmp,tools](osx) = combination-fails # requires openmp (works with right setup) +msdfgen[openmp](osx) = feature-fails # No openmp on osx +mygui[tools](osx) = feature-fails # Linker errors undefined symbols. See https://github.com/microsoft/vcpkg/issues/34416 +nvtt[cuda](x64 & (linux | windows)) = feature-fails # nvtt getting dated wrt cuda +omplapp[opengl](android) = feature-fails # Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY OPENGL_INCLUDE_DIR) +opencv2[ffmpeg](!windows) = feature-fails # ffmpeg5+ is not supported under opencv2. See https://github.com/microsoft/vcpkg/issues/32151 +opencv2[python](osx) = feature-fails # requires python2 +opencv2[world] = feature-fails # See https://github.com/microsoft/vcpkg/issues/29943 +opencv3[ffmpeg] = feature-fails # ffmpeg5+ is not supported under opencv3. See https://github.com/microsoft/vcpkg/issues/32150 +opencv3[halide](osx) = feature-fails # Same as opencv4[halide] +openmvg[core](arm & windows & !uwp) = combination-fails # nmmintrin.h(17): fatal error C1189: #error: This header is specific to X86, X64, ARM64, and ARM64EC targets. See https://github.com/microsoft/vcpkg/issues/33746 +openmvg[openmp](arm & windows & !uwp) = feature-fails +openscap[python](!windows) = feature-fails # CI image lacks swig +opentelemetry-cpp[otlp](uwp) = feature-fails # --grpc_out: protoc-gen-grpc: The system cannot find the file specified. See https://github.com/microsoft/vcpkg/issues/34847 +osgearth[tools](osx) = feature-fails # Undefined _NSSearchPathForDirectoriesInDomains +pangolin[core,eigen,examples,ffmpeg,gui,jpeg,lz4,module,openexr,openni2,png,realsense,tiff,tools,vars,video,zstd]:x64-windows-static-md=combination-fails +pangolin[core,eigen,examples,ffmpeg,gui,jpeg,lz4,module,openexr,png,realsense,test,tiff,tools,vars,video,zstd](!(arm & windows)) = combination-fails # see https://github.com/microsoft/vcpkg/issues/31304 +pangolin[core,eigen,examples,ffmpeg,gui,jpeg,lz4,module,openexr,png,realsense,tiff,tools,uvc,vars,video,zstd]:arm64-osx=combination-fails +pangolin[core,eigen,examples,ffmpeg,gui,jpeg,lz4,module,openexr,png,realsense,tiff,tools,uvc,vars,video,zstd]:x64-linux=combination-fails +pcl[opengl](android) = feature-fails +poco[core,mariadb,mysql] = options # You can not install mariadb and mysql at the same time +ppqsort[openmp](osx) = feature-fails # No openmp on osx +qt3d[animation] = options # is a requirement, see https://github.com/microsoft/vcpkg/issues/31336 +qt3d[extras] = options # is a requirement, see https://github.com/microsoft/vcpkg/issues/31336 +qt5-base[cups](linux) = feature-fails # requires CUPS system libs +qt5-base[vulkan](osx) = feature-fails # needs MolkenVK +qt5compat[iconv](!uwp) = feature-fails # requires qtbase without icu +qtbase[cups](linux) = feature-fails # requires CUPS system libs +qtbase[gles3](android) = feature-fails +qtbase[sql-oci] = feature-fails # see https://github.com/microsoft/vcpkg/issues/32052 +qtmultimedia[core,ffmpeg](linux) = combination-fails # If QT_FEATURE_eglfs is detect it automatically links Qt::Quick; no way to control it externally +qtmultimedia[core,ffmpeg,gstreamer,qml,widgets](osx) = combination-fails # Error: Qt will by default autolink both plugin backends in static builds leading to symbol collisions and a build failure in dependent ports! As such in static builds only one backend is allowed by default. +qtmultimedia[gstreamer]:x64-linux=no-separate-feature-test +realsense2:arm64-windows = fail # fw-update-device.h(1): warning C4828: The file contains a character starting at offset 0x4c3 that is illegal in the current source character set (codepage 65001). See https://github.com/microsoft/vcpkg/issues/35628 +rtabmap[openmp](osx) = feature-fails # No openmp on default osx toolchain +saucer:arm64-windows-static-md=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer:arm64-windows=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer:x64-windows-static-md=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer:x64-windows-static=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer:x64-windows=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer:x86-windows=fail # fatal error C1605: compiler limit: object file size cannot exceed 4 GB +saucer(linux) = fail # requires gcc14 or later +saucer(osx) = fail # std::move_only_function is not supported +sleef[dft](osx) = feature-fails # openmp setup needed +sqlite-orm[test](uwp) = feature-fails # error LNK2019: unresolved external symbol main referenced in function "int __cdecl invoke_main(void)". See https://github.com/microsoft/vcpkg/issues/33769 +sqlpp11[core,mariadb,mysql] = options # can not select mariadb and mysql at the same time +sqlpp11-connector-mysql[core,mariadb,mysql] = options # can not select mariadb and mysql at the same time +suitesparse-graphblas[openmp](osx) = feature-fails # No openmp on default osx toolchain +symengine[tcmalloc](windows) = feature-fails # tcmalloc not found. See https://github.com/microsoft/vcpkg/issues/33576 +tgui[sdl2] = options # At least one of the backend features must be selected: sdl2 sfml +vlfeat[openmp](osx) = feature-fails # No openmp on osx +vlpp[tools](linux) = feature-fails # See https://github.com/microsoft/vcpkg/issues/32143 (error: inconsistent begin/end types in range-based ‘for’ statement) +vlpp[tools](osx) = feature-fails # error: use of undeclared identifier 'PATH_MAX' +vsgqt(android) = fail # https://github.com/vsg-dev/vsgQt/pull/53 +vtk[all](!windows & !android & !osx) = feature-fails # Wait for fix: https://github.com/microsoft/vcpkg/pull/29260 +vtk[all,python]:x64-windows-static-md = feature-fails # vtk[*] dbg: defaultlib 'MSVCRT' conflicts with use of other libs due to python +vtk[core,python,paraview]:x64-linux = options # paraview's transitive gfortran linkage breaks python +vtk[openmp](osx) = feature-fails +vtk-m[cuda](windows & !arm64) = feature-fails +vtk-m[omp](osx) = feature-fails # no openmp on default osx toolchain +vtk-m[omp](windows) = feature-fails # needs openmp 4.0, msvc has openmp 2.0 +wasmedge[aot] = feature-fails # ar: /libzstd.a: No such file or directory. See https://github.com/microsoft/vcpkg/issues/32146 +wayland[force-build](native) = feature-fails # error: To build wayland libraries the `force-build` feature must be enabled and the X_VCPKG_FORCE_VCPKG_WAYLAND_LIBRARIES triplet variable must be set. +xbitmaps(osx) = fail # error: must install xorg-macros 1.3 or later before running autoconf/autogen +xerces-c[xmlch-wchar](!windows) = feature-fails # wchar_t must be 16 bit and not 32 + +# skip +aravis[introspection]:arm64-windows = skip # needs arm64 host +atk[introspection]:arm64-windows = skip # needs arm64 host +cairo[x11](android | osx) = skip # No x11 on osx +chartdir=skip # chartdir does not offer stable download URLs +clapack:arm64-osx=skip +clapack:x64-linux=skip +clapack:x64-osx=skip +clapack:x64-windows-release=skip +clapack:x64-windows=skip +clapack:x86-windows=skip +clapack(x64 & windows & static) = skip # conflicts with lapack-reference which provides blas +dbghelp=skip # Since pipeline cannot automatically install dbghelp dependency, skip this detection +dbus[x11](osx) = skip # No x11 on osx +entt[experimental] = skip # required head build +freerdp[server](osx) = skip # Uses api removed with macOS 15. Don't get fixed. See https://github.com/FreeRDP/FreeRDP/issues/10558 +freerdp[x11](osx) = skip # No x11 on osx +gdk-pixbuf[introspection]:arm64-windows = skip # needs arm64 host +geotrans = skip # Port geotrans source ftp://ftp.nga.mil server extremely slow may take several hours to download +glad[glx](osx) = skip # No x11 on osx +gobject-introspection(arm64 & windows) = skip # needs arm64 host +graphene[introspection]:arm64-windows = skip # needs arm64 host +gsoap = skip # gsoap does not offer stable public source downloads +gtk3(windows) = skip # regularly hangs +harfbuzz[introspection]:arm64-windows = skip # needs arm64 host +hello-imgui[freetype-lunasvg] = skip # see https://github.com/microsoft/vcpkg/issues/44212 +hello-imgui[sdl2-binding] = skip # see https://github.com/microsoft/vcpkg/issues/44212 +itk[python] = skip # fails on configure or takes very long to build +itk(android) = skip # try_run +itk(arm & windows & !uwp) = skip # try_run +kf6archive(android) = skip # needs newer ECM version +libhdfs3 = skip # never worked https://github.com/microsoft/vcpkg/pull/10021#issuecomment-1595343157 +libqcow=skip # The developer of libqcow does not offer stable release archives +magnum[anyshaderconverter,shadertools,shaderconverter,vk-info] = skip # only available in head build +magnum-plugins[cgltfimporter,glslangshaderconverter,ktximageconverter,ktximporter,openexrimageconverter,openexrimporter,spirvtoolsshaderconverter,stbdxtimageconverter] = skip # only available in head build +octave(android)=skip +opencv4[dshow]:x64-uwp=feature-fails +opencv4[halide]=no-separate-feature-test # error C2039: 'attachHalide': is not a member of 'cv::dnn::GeluFunctor' +opencv4[opengl]=no-separate-feature-test # needs Win32UI, Qt or GTK to enable HAVE_OPENGL +openjpeg[tools] = skip # fails and is deprecated +openvino:arm64-android=skip # conflicts with kleidiai +openvino:arm64-osx=skip # conflicts with kleidiai +pango[introspection]:arm64-windows = skip # needs arm64 host +qt5-base(android) = skip # port doesn't support cross builds +qtbase[glib](android) = skip # undefined symbols (missing link libs) when used with network +qtbase[vulkan](osx) = skip # no MoltenVK on macOS +qtbase[xcb,xcb-xlib,xkb,xkbcommon-x11,xlib,xrender](android) = skip # no x11 in CI +qtbase[xcb,xcb-xlib,xkb,xkbcommon-x11,xlib,xrender](osx) = skip # no x11 in CI, upstream "support on macOS is minimal and untested" +qtbase[xcb,xcb-xlib,xkb,xkbcommon-x11,xlib,xrender](windows) = skip # no x11 in CI +qtvirtualkeyboard[t9write] = skip # depends on the port 't9write' that does not exists +qtwebengine = skip # Takes too long to feature test at ~3 hours per feature +s2n = skip # builds too slow +usd=skip # USD has set official policy that they will not update to be compatible with TBB in the near term (https://github.com/PixarAnimationStudios/USD/issues/1600) +vtk[ioocct](!uwp) = skip +vtk-m[cuda]:x64-linux = skip # CUDA clash with default gcc in Ubuntu 22.04, and not a quick failure. +winpcap = skip # Broken and merked for removal. See https://github.com/microsoft/vcpkg/pull/33215 + +# Skipped due to time and x64-osx going away soon: +arrayfire:x64-osx=skip +dartsim:x64-osx=skip # due to dependency on osg +gz-cmake:x64-osx=skip +gz-cmake3:x64-osx=skip +gz-common:x64-osx=skip +gz-common5:x64-osx=skip +gz-fuel-tools:x64-osx=skip +gz-fuel-tools8:x64-osx=skip +gz-gui:x64-osx=skip +gz-gui7:x64-osx=skip +gz-math:x64-osx=skip +gz-math7:x64-osx=skip +gz-msgs:x64-osx=skip +gz-msgs9:x64-osx=skip +gz-physics:x64-osx=skip +gz-physics6:x64-osx=skip +gz-plugin:x64-osx=skip +gz-plugin2:x64-osx=skip +gz-rendering:x64-osx=skip +gz-rendering7:x64-osx=skip +gz-sensors:x64-osx=skip +gz-sensors7:x64-osx=skip +gz-sim:x64-osx=skip +gz-tools:x64-osx=skip +gz-tools2:x64-osx=skip +gz-transport:x64-osx=skip +gz-transport12:x64-osx=skip +gz-utils:x64-osx=skip +gz-utils2:x64-osx=skip +libtorch:x64-osx=skip +mdl-sdk:x64-osx=skip +osg:x64-osx=skip +osg-qt:x64-osx=skip # due to dependency on osg +osgearth:x64-osx=skip # due to dependency on osg +sdformat:x64-osx=skip # due to dependency on gz-* diff --git a/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch b/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch new file mode 100644 index 0000000..c3666ec --- /dev/null +++ b/vcpkg/scripts/cmake/compile_wrapper_consider_clang-cl.patch @@ -0,0 +1,12 @@ +diff --git a/usr/share/automake-1.16/compile b/usr/share/automake-1.16/compile +index 2078fc833..dfc946593 100755 +--- a/usr/share/automake-1.16/compile ++++ b/usr/share/automake-1.16/compile +@@ -256,6 +256,7 @@ EOF + exit $? + ;; + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ ++ clang-cl | *[/\\]clang-cl | clang-cl.exe | *[/\\]clang-cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) + func_cl_wrapper "$@" # Doesn't return... + ;; diff --git a/vcpkg/scripts/cmake/execute_process.cmake b/vcpkg/scripts/cmake/execute_process.cmake new file mode 100644 index 0000000..a338dda --- /dev/null +++ b/vcpkg/scripts/cmake/execute_process.cmake @@ -0,0 +1,12 @@ +if (NOT DEFINED Z_VCPKG_OVERRIDEN_EXECUTE_PROCESS)
+ set(Z_VCPKG_OVERRIDEN_EXECUTE_PROCESS ON)
+
+ if (DEFINED VCPKG_DOWNLOAD_MODE)
+ function(execute_process)
+ message(FATAL_ERROR "This command cannot be executed in Download Mode.\nHalting portfile execution.\n")
+ endfunction()
+ set(Z_VCPKG_EXECUTE_PROCESS_NAME "_execute_process")
+ else()
+ set(Z_VCPKG_EXECUTE_PROCESS_NAME "execute_process")
+ endif()
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake b/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake new file mode 100644 index 0000000..95684bf --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_acquire_msys.cmake @@ -0,0 +1,662 @@ +# Full mirror list: https://github.com/msys2/MSYS2-packages/blob/master/pacman-mirrors/mirrorlist.msys +set(Z_VCPKG_ACQUIRE_MSYS_MIRRORS + # Alternative primary + "https://repo.msys2.org/" + # Tier 1 + "https://mirror.yandex.ru/mirrors/msys2/" + "https://mirrors.tuna.tsinghua.edu.cn/msys2/" + "https://mirrors.ustc.edu.cn/msys2/" + "https://mirror.selfnet.de/msys2/" +) + +# Downloads the given package +function(z_vcpkg_acquire_msys_download_package out_archive) + cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "URL;SHA512;FILENAME" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_download_package passed extra args: ${arg_UNPARSED_ARGUMENTS}") + endif() + + string(REPLACE "https://repo.msys2.org/" "https://mirror.msys2.org/" all_urls "${arg_URL}") + foreach(mirror IN LISTS Z_VCPKG_ACQUIRE_MSYS_MIRRORS) + string(REPLACE "https://mirror.msys2.org/" "${mirror}" mirror_url "${arg_URL}") + list(APPEND all_urls "${mirror_url}") + endforeach() + + vcpkg_download_distfile(msys_archive + URLS ${all_urls} + SHA512 "${arg_SHA512}" + FILENAME "${arg_FILENAME}" + QUIET + ) + set("${out_archive}" "${msys_archive}" PARENT_SCOPE) +endfunction() + +# Declares a package +# Writes to the following cache variables: +# - Z_VCPKG_MSYS_PACKAGES_AVAILABLE +# - Z_VCPKG_MSYS_${arg_NAME}_URL +# - Z_VCPKG_MSYS_${arg_NAME}_SHA512 +# - Z_VCPKG_MSYS_${arg_NAME}_FILENAME +# - Z_VCPKG_MSYS_${arg_NAME}_DEPS +# - Z_VCPKG_MSYS_${arg_NAME}_PATCHES +# - Z_VCPKG_MSYS_${arg_NAME}_DIRECT +# - Z_VCPKG_MSYS_${arg_NAME}_PROVIDES +# - Z_VCPKG_MSYS_${alias}_PROVIDED_BY +function(z_vcpkg_acquire_msys_declare_package) + cmake_parse_arguments(PARSE_ARGV 0 arg "DIRECT" "NAME;URL;SHA512" "DEPS;PATCHES;PROVIDES") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package passed extra args: ${arg_UNPARSED_ARGUMENTS}") + endif() + foreach(required_arg IN ITEMS URL SHA512) + if(NOT DEFINED arg_${required_arg}) + message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package requires argument: ${required_arg}") + endif() + endforeach() + + if(arg_DIRECT) + if(NOT arg_NAME) + message(FATAL_ERROR "internal error: z_vcpkg_acquire_msys_declare_package requires argument: NAME") + endif() + get_filename_component(filename "${arg_URL}" NAME) + else() + if(NOT arg_URL MATCHES [[^https://mirror\.msys2\.org/.*/(([^/]*)-[^-/]+-[^-/]+-[^-/]+\.pkg\.tar\.(xz|zst))$]]) + message(FATAL_ERROR "internal error: regex does not match supplied URL to vcpkg_acquire_msys: ${arg_URL}") + endif() + set(filename "msys2-${CMAKE_MATCH_1}") + if(NOT DEFINED arg_NAME) + set(arg_NAME "${CMAKE_MATCH_2}") + endif() + if(Z_VCPKG_MSYS_${arg_NAME}_DIRECT) + return() + endif() + if(arg_NAME IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE) + message(FATAL_ERROR "Redeclaration of package '${arg_NAME}'") + endif() + endif() + + list(APPEND Z_VCPKG_MSYS_PACKAGES_AVAILABLE "${arg_NAME}") + set(Z_VCPKG_MSYS_PACKAGES_AVAILABLE "${Z_VCPKG_MSYS_PACKAGES_AVAILABLE}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_URL "${arg_URL}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_SHA512 "${arg_SHA512}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_FILENAME "${filename}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_DEPS "${arg_DEPS}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_PATCHES "${arg_PATCHES}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_DIRECT "${arg_DIRECT}" CACHE INTERNAL "") + set(Z_VCPKG_MSYS_${arg_NAME}_PROVIDES "${arg_PROVIDES}" CACHE INTERNAL "") + foreach(name IN LISTS arg_PROVIDES) + set(Z_VCPKG_MSYS_${name}_PROVIDED_BY "${arg_NAME}" CACHE INTERNAL "") + endforeach() +endfunction() + +# Collects all required packages to satisfy the given input set +# Writes to the following cache variables: +# - Z_VCPKG_MSYS_<name>_ARCHIVE +function(z_vcpkg_acquire_msys_download_packages) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "OUT_UNKNOWN;OUT_RESOLVED" "PACKAGES") + set(backlog "${arg_PACKAGES}") + list(REMOVE_DUPLICATES backlog) + + list(FILTER arg_PACKAGES EXCLUDE REGEX "^mingw64") + if(NOT arg_PACKAGES STREQUAL "" AND NOT "msys2-runtime" IN_LIST arg_PACKAGES) + list(APPEND backlog "msys2-runtime") + endif() + + set(unknown "") + set(resolved "") + set(need_msys_runtime 0) + while(NOT backlog STREQUAL "") + list(POP_FRONT backlog name) + if(DEFINED Z_VCPKG_MSYS_${name}_PROVIDED_BY AND NOT name IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE) + set(name "${Z_VCPKG_MSYS_${name}_PROVIDED_BY}") + if(name IN_LIST resolved) + continue() + endif() + endif() + if(NOT name IN_LIST Z_VCPKG_MSYS_PACKAGES_AVAILABLE) + list(APPEND unknown "${name}") + continue() + endif() + list(APPEND resolved "${name}") + list(REMOVE_ITEM Z_VCPKG_MSYS_${name}_DEPS ${resolved} ${backlog}) + list(APPEND backlog ${Z_VCPKG_MSYS_${name}_DEPS}) + + z_vcpkg_acquire_msys_download_package(archive + URL "${Z_VCPKG_MSYS_${name}_URL}" + SHA512 "${Z_VCPKG_MSYS_${name}_SHA512}" + FILENAME "${Z_VCPKG_MSYS_${name}_FILENAME}" + ) + set(Z_VCPKG_MSYS_${name}_ARCHIVE "${archive}" CACHE INTERNAL "") + endwhile() + if(DEFINED arg_OUT_UNKNOWN) + set("${arg_OUT_UNKNOWN}" "${unknown}" PARENT_SCOPE) + endif() + if(DEFINED arg_OUT_RESOLVED) + set("${arg_OUT_RESOLVED}" "${resolved}" PARENT_SCOPE) + endif() +endfunction() + +# Returns a stable collection of hashes, regardless of package order +function(z_vcpkg_acquire_msys_collect_hashes out_hash) + cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "" "PACKAGES") + list(SORT arg_PACKAGES) + set(result "") + foreach(name IN LISTS arg_PACKAGES) + if(NOT DEFINED Z_VCPKG_MSYS_${name}_SHA512) + message(FATAL_ERROR "SHA512 unknown for '${name}'.") + endif() + string(APPEND result "${Z_VCPKG_MSYS_${name}_SHA512}") + foreach(patch IN LISTS Z_VCPKG_MSYS_${name}_PATCHES) + file(SHA512 "${patch}" patch_sha) + string(APPEND result "${patch_sha}") + endforeach() + endforeach() + set(${out_hash} "${result}" PARENT_SCOPE) +endfunction() + +function(vcpkg_acquire_msys out_msys_root) + cmake_parse_arguments(PARSE_ARGV 1 "arg" + "NO_DEFAULT_PACKAGES;Z_ALL_PACKAGES" + "Z_DECLARE_EXTRA_PACKAGES_COMMAND" + "PACKAGES;DIRECT_PACKAGES" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_acquire_msys was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + z_vcpkg_acquire_msys_declare_all_packages() + if(NOT "${arg_Z_DECLARE_EXTRA_PACKAGES_COMMAND}" STREQUAL "") + cmake_language(CALL "${arg_Z_DECLARE_EXTRA_PACKAGES_COMMAND}") + endif() + set(requested "${arg_PACKAGES}") + if(arg_Z_ALL_PACKAGES) + set(requested "${Z_VCPKG_MSYS_PACKAGES_AVAILABLE}") + elseif(NOT arg_NO_DEFAULT_PACKAGES) + list(APPEND requested bash coreutils file gawk grep gzip diffutils make pkgconf sed) + endif() + + if(DEFINED arg_DIRECT_PACKAGES AND NOT arg_DIRECT_PACKAGES STREQUAL "") + list(LENGTH arg_DIRECT_PACKAGES direct_packages_length) + math(EXPR direct_packages_parity "${direct_packages_length} % 2") + math(EXPR direct_packages_number "${direct_packages_length} / 2") + math(EXPR direct_packages_last "${direct_packages_number} - 1") + + if(direct_packages_parity EQUAL 1) + message(FATAL_ERROR "vcpkg_acquire_msys(... DIRECT_PACKAGES ...) requires exactly pairs of URL/SHA512") + endif() + + set(direct_packages "") + # direct_packages_last > direct_packages_number - 1 > 0 - 1 >= 0, so this is fine + foreach(index RANGE "${direct_packages_last}") + math(EXPR url_index "${index} * 2") + math(EXPR sha512_index "${url_index} + 1") + list(GET arg_DIRECT_PACKAGES "${url_index}" url) + list(GET arg_DIRECT_PACKAGES "${sha512_index}" sha512) + get_filename_component(filename "${url}" NAME) + if(NOT filename MATCHES "^(.*)-[^-]+-[^-]+-[^-]+\.pkg\.tar\..*$") + message(FATAL_ERROR "Cannot determine package name for '${filename}'") + endif() + set(pkg_name "${CMAKE_MATCH_1}") + z_vcpkg_acquire_msys_declare_package( + NAME "${pkg_name}" + URL "${url}" + SHA512 "${sha512}" + DIRECT + ) + list(APPEND direct_packages "${pkg_name}") + endforeach() + list(INSERT requested 0 ${direct_packages}) + endif() + + z_vcpkg_acquire_msys_download_packages( + PACKAGES ${requested} + OUT_RESOLVED resolved + OUT_UNKNOWN unknown + ) + if(NOT unknown STREQUAL "") + message(FATAL_ERROR "Unknown packages were required for vcpkg_acquire_msys(${requested}): ${unknown} +This can be resolved by explicitly passing URL/SHA pairs to DIRECT_PACKAGES.") + endif() + set(Z_VCPKG_MSYS_PACKAGES_RESOLVED "${resolved}" CACHE INTERNAL "Export for CI") + + z_vcpkg_acquire_msys_collect_hashes(hashes PACKAGES ${resolved}) + string(SHA512 total_hash "${hashes}") + string(SUBSTRING "${total_hash}" 0 16 total_hash) + set(path_to_root "${DOWNLOADS}/tools/msys2/${total_hash}") + + if(NOT EXISTS "${path_to_root}") + file(REMOVE_RECURSE "${path_to_root}.tmp") + file(MAKE_DIRECTORY "${path_to_root}.tmp/tmp") + foreach(name IN LISTS resolved) + file(ARCHIVE_EXTRACT + INPUT "${Z_VCPKG_MSYS_${name}_ARCHIVE}" + DESTINATION "${path_to_root}.tmp" + ) + if(Z_VCPKG_MSYS_${name}_PATCHES) + z_vcpkg_apply_patches( + SOURCE_PATH "${path_to_root}.tmp" + PATCHES ${Z_VCPKG_MSYS_${name}_PATCHES} + ) + endif() + endforeach() + file(RENAME "${path_to_root}.tmp" "${path_to_root}") + endif() + # Due to skipping the regular MSYS2 installer, + # some config files need to be established explicitly. + if(NOT EXISTS "${path_to_root}/etc/fstab") + # This fstab entry removes the cygdrive prefix from paths. + file(WRITE "${path_to_root}/etc/fstab" "none / cygdrive binary,posix=0,noacl,user 0 0") + endif() + # No pkgconfig hints from msys2 installation + file(REMOVE_RECURSE + "${path_to_root}/clangarm64/lib/pkgconfig" + "${path_to_root}/clang64/lib/pkgconfig" + "${path_to_root}/mingw32/lib/pkgconfig" + "${path_to_root}/mingw64/lib/pkgconfig" + "${path_to_root}/ucrt64/lib/pkgconfig" + "${path_to_root}/usr/lib/pkgconfig" + ) + message(STATUS "Using msys root at ${path_to_root}") + set("${out_msys_root}" "${path_to_root}" PARENT_SCOPE) +endfunction() + +# Expand this while CMAKE_CURRENT_LIST_DIR is for this file. +set(Z_VCPKG_AUTOMAKE_CLANG_CL_PATCH "${CMAKE_CURRENT_LIST_DIR}/compile_wrapper_consider_clang-cl.patch") + +macro(z_vcpkg_acquire_msys_declare_all_packages) + set(Z_VCPKG_MSYS_PACKAGES_AVAILABLE "" CACHE INTERNAL "") + + # The following list can be updated via test port vcpkg-ci-msys2[update-all]. + # Upstream binary package information is available via + # https://packages.msys2.org/search?t=binpkg&q=<Pkg> + + # msys subsystem + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/autoconf-wrapper-20240607-1-any.pkg.tar.zst" + SHA512 e91768eaa3e9ad849c8ab2177593503fb85cda623adfe2e21eb5a34dd58c2c6686bee42cb1d1a6cfe8ae5727fb10edc5e1229e56f96091c25cae4eecc03f191a + PROVIDES autoconf + DEPS autoconf2.72 bash sed + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/autoconf2.72-2.72-3-any.pkg.tar.zst" + SHA512 307751b00b6a9729673d0af35ccf327041880f20498143100053a9d914927e86dd20a4aa4cd9e83e3d4e7e27c2d068cfc0313c6cab4f103955e4dafede22f4d0 + DEPS awk bash diffutils m4 perl sed + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/autoconf-archive-2023.02.20-1-any.pkg.tar.zst" + SHA512 0dbdba67934402eeb974e6738eb9857d013342b4e3a11200710b87fbf085d5bebf49b29b6a14b6ff2511b126549919a375b68f19cc22aa18f6ba23c57290ac72 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/automake-wrapper-20240607-1-any.pkg.tar.zst" + SHA512 59c219019a776d36cf37a755fdb1c60b0bfd4ef8ec4dc55d2ba5de00e85686cc480d05689d8fa23532615000f3371702c2b2fe31a0f18f92df9f4353202a6e23 + PROVIDES automake + DEPS automake1.16 automake1.17 bash gawk + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/automake1.16-1.16.5-1-any.pkg.tar.zst" + SHA512 62c9dfe28d6f1d60310f49319723862d29fc1a49f7be82513a4bf1e2187ecd4023086faf9914ddb6701c7c1e066ac852c0209db2c058f3865910035372a4840a + DEPS bash perl + PATCHES "${Z_VCPKG_AUTOMAKE_CLANG_CL_PATCH}" + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/automake1.17-1.17-1-any.pkg.tar.zst" + SHA512 cb935efc2e303e6f88eee3ab12ca1311c32d3c92e73e04b00b6b9269ce512649efa09af03d22a733f9cc4ebbb99fc64d8dcc123bf68fb914a20bf3cc651375f5 + DEPS bash perl + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/bash-5.2.037-2-x86_64.pkg.tar.zst" + SHA512 dda8e37b5d7185c1cf935eb8d8a7eec7b6a065c44984486725b27d842a793228cd9586a3b68cef4a4e6bf6f8685aa416628cd8da18184f427e3403d73186bc6f + PROVIDES sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/binutils-2.44-1-x86_64.pkg.tar.zst" + SHA512 4bddf315ad028841144c2e1f38a08437f8acde2652f6a32e4ce2dfa59b6c8eb6fec25c3383e944324e16f40c02b88b17c1c5d41b219b4ed0f413c6815f1a1012 + DEPS libiconv libintl zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/bzip2-1.0.8-4-x86_64.pkg.tar.zst" + SHA512 1d2ce42c6775c0cb0fe9c2863c975fd076579131d0a5bce907355315f357df4ee66869c9c58325f5b698f3aba2413b2823deda86dd27fdb6e2e5e5d4de045259 + DEPS libbz2 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/coreutils-8.32-5-x86_64.pkg.tar.zst" + SHA512 63f99348e654440458f26e9f52ae3289759a5a03428cf2fcf5ac7b47fdf7bf7f51d08e3346f074a21102bee6fa0aeaf88b8ebeba1e1f02a45c8f98f69c8db59c + DEPS libiconv libintl gmp + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/diffutils-3.12-1-x86_64.pkg.tar.zst" + SHA512 9b486fa45e827392eda39cff268530b0f3bdc5cc80881b55ae610828f861e6a63b790f395976277085b469423264ade705e5a0ecdf7b22fc8c017fc3d90acc78 + DEPS libiconv libintl sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/file-5.46-2-x86_64.pkg.tar.zst" + SHA512 1225311082642b094991c7467ba88eaca3b16e680d736979b6b7f750468b05f5a410e88f7d211e2159e1e80b6aa84c882b26e68296a27f5ee9c3998b61f73fb5 + DEPS gcc-libs libbz2 liblzma libzstd zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/findutils-4.10.0-2-x86_64.pkg.tar.zst" + SHA512 d817f31b1130f73ababf004585e540c2adc14b2517ae350c73ef3f9b6c25b92ee377b24f6695980fd815c91fa8c870e574633092bd9436b7dbfb30b9d782b5fc + DEPS libintl libiconv + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gawk-5.3.2-1-x86_64.pkg.tar.zst" + SHA512 8d33ff3772fcfd666ebf2211b92942f9ee4af6cd80d4f69762cdac0afb8522aad85244a1701df80a9980c8dba58e7b70d757146945e28cb77e80160b27f2a49f + PROVIDES awk + DEPS libintl libreadline mpfr sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gcc-libs-13.3.0-1-x86_64.pkg.tar.zst" + SHA512 f38b33ecc56923bff2e43d7c0fc8a79c752feeb6af9d49ff4bdd919e04ca54e7c6a0710e9c55fc700ad53eba6c4670973d7cc867971a40bcbe3c82932a7d3f38 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gettext-0.22.5-1-x86_64.pkg.tar.zst" + SHA512 50e1969179c6b33376396f200f6c25f709a6104d253121a8148bc5591b140c6f1729dc703374315a96137fa7cfec2abe427ea63bce243d5c0729cee8964ffbd3 + DEPS libasprintf libgettextpo libintl + ) + # This package shouldn't be a here + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gettext-devel-0.22.5-1-x86_64.pkg.tar.zst" + SHA512 6de3e04ba238353df65111120ec4850b49f5797f27626ebc27c561390f75b4b1b25c84ac377f6ab15d586ca3ee3940eaf3aba074db1a50d8b8930c1135eae7cf + DEPS gettext # libiconv-devel + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gmp-6.3.0-1-x86_64.pkg.tar.zst" + SHA512 d4e8549e55d4088eca30753f867bf82d9287955209766f488f2a07ecc71bc63ef2c50fcc9d47470ea3b0d2f149f1648d9c2453e366e3eb2c2e2d60939f311a40 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/grep-1~3.0-7-x86_64.pkg.tar.zst" + SHA512 8a5248d0aa7c8d9e57a810f0b03b76db31ebc3c64158886804fdc82095709d496fee433d3aa744484c6cdcb5877ebe95d03b15486cc7bdb13ba33cfbf71e4e14 + DEPS libiconv libintl libpcre sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/gzip-1.14-1-x86_64.pkg.tar.zst" + SHA512 cc316915d1dc0090b5acb385ce392a3ac2c37e1df4f72198a976f9b0f7c4b42d15cf14229bc06c19c22ce39dca79389e426cff592437e05df77f453ecc6f42c5 + DEPS bash + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libasprintf-0.22.5-1-x86_64.pkg.tar.zst" + SHA512 26ad060897f86cfa8257657d9ca3f64302c3bf949369ef29edd1d2f1525cbd462351d3177ba036ae91e8dec0c8501afdd5a666c1e51d7693d7f16f05406d35dd + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libbz2-1.0.8-4-x86_64.pkg.tar.zst" + SHA512 5a7be6d04e55e6fb1dc0770a8c020ca24a317807c8c8a4813146cd5d559c12a6c61040797b062e441645bc2257b390e12dd6df42519e56278a1fe849fe76a1c4 + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libgettextpo-0.22.5-1-x86_64.pkg.tar.zst" + SHA512 a4ea2c576de4dca804d013e257e99a185eacafa558bd3793ece3216a21884c0ff23b5369cd8954bf7258e8cea9ffe9197d8a752baa67b5e895daac83de93d2f0 + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libiconv-1.18-1-x86_64.pkg.tar.zst" + SHA512 77979ed35af45aa5bb7fb6b07d649e8eafa69ebdc8e421c2a7bf69ee567f814b38623a12be0736fb56c17c0aeff69ba769bc52110f62f8e5fdc5bcf334d88d44 + DEPS gcc-libs libintl + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libintl-0.22.5-1-x86_64.pkg.tar.zst" + SHA512 1f1826763bcc252f15a0a5a27fbf596a2b5fad5e092bdff17af8231c373c0de17be7411938068aac0f0a617edbb32533de6619f6c58ebcdec7480c210673af45 + DEPS gcc-libs libiconv + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/liblzma-5.8.1-1-x86_64.pkg.tar.zst" + SHA512 4bace8254eb63c9fd6354beea92c65d34a0ba9258bbd99a1a061adc4c0c33891b83ad10503042984fbb40560dd5f92a6ac4913a269dae00e9d3f850c79d92e71 + # This package installs only a DLL. No extra deps. + DEPS # gettext libiconv sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libpcre-8.45-5-x86_64.pkg.tar.zst" + SHA512 3a0fffaf4d24bac07847220bac70b0e3f15645ea04171c5f4079966cbec01cee9138e36e5100b989af2dcce67660756c060fb3298c86fa120779c15d083231eb + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libreadline-8.2.013-1-x86_64.pkg.tar.zst" + SHA512 31a649a3b694434ce6a1c70ff5fa208a99acf323a6a1b521e1ce8b1cc0cdb9b63df3200ab497ba0e477d6ab61721bdfb133a90156fd88295b4ff9ff2551866cd + DEPS ncurses + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libtool-2.5.4-1-x86_64.pkg.tar.zst" + SHA512 65bdd278c19a6f32094d9944ac87418f38966e453f5fca60b2e00966731af88b119b94ef3cb6a68a9fd9a183f846d08a6524b9f273d311987acc308e84e3cf00 + DEPS sh + # extra deps which are really needed + awk findutils grep sed tar + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libxcrypt-4.4.38-1-x86_64.pkg.tar.zst" + SHA512 a23b90d67773a4846cf0aa0a37132f65ca5244a16d04c903ac3807e146a41a4cab033ac12572c95df6f6ad3272ac97097dfc678b1c2da25092ce9ed1e9dddc01 + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/libzstd-1.5.7-1-x86_64.pkg.tar.zst" + SHA512 02cf577567773f7f93f4df404d3b0a62d0cab4b2b63c76d572ef3af591e9fe6571b3d7e79e868ae5d7967b8f540941489a4004367c64113e1688f392827fc6cd + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/m4-1.4.19-2-x86_64.pkg.tar.zst" + SHA512 7471099ba7e3b47e5b019dc0e563165a8660722f2bbd337fb579e6d1832c0e7dcab0ca9297c4692b18add92c4ad49e94391c621cf38874e2ff63d4f926bac38c + DEPS bash gcc-libs libiconv + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/make-4.4.1-2-x86_64.pkg.tar.zst" + SHA512 b55caaf0d54b784b5dffcbb75a1862fc7359b91caa1e60234e208de03c74159fd003d68f5dddd387adef752bb13805e654f17ec5cb6add51546b9e30a1091b61 + DEPS libintl sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/mpfr-4.2.2-1-x86_64.pkg.tar.zst" + SHA512 80fa09c637c4ff3943b20a5b74e945c7084e1f7d571d7124a5b45926533a24125a0027167f99eb9c1e9f96fc3d61344e23c0b4471815846d90367bcfb8f89eba + DEPS gmp + ) + if(X_VCPKG_USE_MSYS2_RUNTIME_3.4) # temporary option, for Windows 7.0 and 8.0, or in case of regressions + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.4-3.4.10-2-x86_64.pkg.tar.zst" + SHA512 3fa087d4eb4e260785b81d5b6f4400ec128a83ff940da732bf147dfde457224573fa467e735b63c9a138872f5c9830f3684f824b2aa5d344fb95dfb91632f832 + PROVIDES msys2-runtime + ) + else() + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/msys2-runtime-3.6.2-2-x86_64.pkg.tar.zst" + SHA512 2a81a6c10347b59bb5de237c07c61ca2468ee9b9c0907d35e8ece4389d6cd18cd24ba1f96655a052c9c8b3d52fe1c62288c96873202e0036b89e500e8beb8d8a + ) + endif() + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/ncurses-6.5.20240831-2-x86_64.pkg.tar.zst" + SHA512 ff84849e3857e31fd4f3acc48e8a9bc2fa6ff226f848636c206fb322e7c49de9677c24784575ad5d13620f31d6203739b0f7ab068081bef0d8ab873c4473ee4d + DEPS gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/patch-2.7.6-3-x86_64.pkg.tar.zst" + SHA512 dd5069cab243c8367152b1b8799a199103a7a86be2d478a9f4f84406591ad892284859531ec29ca09de8f278e6c97492896a08b6a08bcbc3ac09ac297e653ec0 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/perl-5.38.4-2-x86_64.pkg.tar.zst" + SHA512 e49ac4b917a3eb9aa354ea88f8b6eb708c3339de6d7fa0fc638314a00e97f4353525bb500ee21a0167c37efcd22f52499daedf8daf296cbfbcaa9f9a852fb080 + DEPS coreutils libxcrypt sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/pkgconf-2.4.3-1-x86_64.pkg.tar.zst" + SHA512 df86ba01d336f1ca0aef5fa1af49f0e6ef1ccd8625729f31edde01013dd303512c915be04cb72964913140dcbcaa92806013c2d6a8c5d9f1539b2e646c09d669 + PROVIDES pkg-config + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/sed-4.9-1-x86_64.pkg.tar.zst" + SHA512 8006a83f0cc6417e3f23ffd15d0cbca2cd332f2d2690232a872ae59795ac63e8919eb361111b78f6f2675c843758cc4782d816ca472fe841f7be8a42c36e8237 + DEPS libintl sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/tar-1.35-2-x86_64.pkg.tar.zst" + SHA512 86269fe17729e5381f8236a0251088110725c3eb930215b8378b6673e5ee136847997bb6a667fe0398b65b85e3f3a7e4679a0fd4bb2ebcb9429a5d7273a02d54 + DEPS libiconv libintl sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/texinfo-7.2-1-x86_64.pkg.tar.zst" + SHA512 3f8ff7b399defee89ba6add61d23ba6ab87ea059ecd63ffaae05d8e01bd36b5cba3cb0fe177da83857135c03655120a1fca388e6b11cb0f8296c43ccafcab679 + DEPS perl sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/unzip-6.0-3-x86_64.pkg.tar.zst" + SHA512 1d6df49e826617ef3d3976be33361e189d8a5aee3a33ae79474fd08ca44ebd113981e6ba25c968b3cf5fb9826edd42dee21a97261cbc86fd8b143c950ba1f357 + DEPS bash libbz2 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/which-2.23-4-x86_64.pkg.tar.zst" + SHA512 ad8ad602b76719b13cf8e650ca493fe9433cfd35d48bda33ce38d0523e9ade5702f89a62508ec0e2a453639a78ed54fc212f76ce8861ac58ac81e6eed476397a + DEPS sh + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/xz-5.8.1-1-x86_64.pkg.tar.zst" + SHA512 2f5e01663d21bd4e36cee60e7fc897391a6592052ef8f44a472340883c5ee7b31fe06a8a603828f93c3350cba85db16debcef13a9253f1762938bb5d327e6f08 + DEPS libiconv libintl liblzma + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/msys/x86_64/zlib-1.3.1-1-x86_64.pkg.tar.zst" + SHA512 a432b0f927d342b678df706487595eff1b780371548933f956adcf697eea11ddbca2863d9d9fb88675a7040dcfddab56f8f71a8ae4d0cd4969e715545c77e87c + DEPS gcc-libs + ) + + # mingw64 subsystem + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-bzip2-1.0.8-3-any.pkg.tar.zst" + SHA512 fb1ae524d7b04e1f35c3101c318136dbe08da8093bda98f6aea7e6c2564fec5f8533fb61cac5001b6425105cd982511964ec04099c6651f990dc3b8baf7f7057 + DEPS mingw-w64-x86_64-gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-ca-certificates-20241223-1-any.pkg.tar.zst" + SHA512 7ccb46991cb7f0d128ec188639c0d783a9c5c2d83dee7caf1d3a3c7e87b878d626cf91b56ad0023343dee2b1f3867c0d325dae58d0b8c690b9fc8af8543c145e + DEPS mingw-w64-x86_64-p11-kit + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-expat-2.7.1-2-any.pkg.tar.zst" + SHA512 dda4607ec07a793b0fa0cc5f93fde1d8842b9f98d5cc826e7f23758486422723fc656c94c79eba263fbfde5ac0ef0f3a13c8725857644b1c428b8da5dfa367f2 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-libgfortran-15.1.0-5-any.pkg.tar.zst" + SHA512 65dfeb735c99d2e112363f5135be14eecb1e56bf88ecd359f40e557f6714ecd1d721e3a8b875ac04c9b53c7e829375501ad8e9c927b484006798e867a9a97d34 + PROVIDES mingw-w64-x86_64-fc-libs + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libwinpthread + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-libs-15.1.0-5-any.pkg.tar.zst" + SHA512 cfbfc2fa0029ae9dda628cdaea476579a6cdfafeec716986b4e0761f02b755c338e57e1b96c457881109343d1bd8b55be349c2df05bb57ba4449e56f1acb569f + PROVIDES mingw-w64-x86_64-omp + DEPS mingw-w64-x86_64-libwinpthread + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gettext-runtime-0.25-1-any.pkg.tar.zst" + SHA512 c452759c0e10c68540a91f8a29a1600aef164c4fe12f1e7089858304d80e3071e3a953d7506a0f845476df3a30dd8d270a00a3a55d6e9b14dfe69b0d635ea608 + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libiconv + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gmp-6.3.0-2-any.pkg.tar.zst" + SHA512 38ab150051d787e44f1c75b3703d6c8deb429d244acb2a973ee232043b708e6c9e29a1f9e28f12e242c136d433e8eb5a5133a4d9ac7b87157a9749a8d215d2f0 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libffi-3.4.8-1-any.pkg.tar.zst" + SHA512 2747a6c44b159a8df4ca141273ab13e5348ac273bc8643b6179c0d803d53710f0b807e985531a39c3e5b74be640feeafd57c9adc98e02c0a429ba9bfb5dd2d21 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libiconv-1.18-1-any.pkg.tar.zst" + SHA512 7aed58286d279699dede96c74e649cea7b78942e51350d277aca9272351d3b645ecfd129b5bbafd40f7e95bfc0187c9df118eca47f2cb795811752a18bcb3745 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libsystre-1.0.2-1-any.pkg.tar.zst" + SHA512 e5ce0ff1dbf778f8437a33362c4cd517313425944cfc7362cd0bbfd097de835d3ae8aea6696345d9d054517b8146ac564580a33d56a519dbba042ca79cb46317 + PROVIDES mingw-w64-x86_64-libgnurx + DEPS mingw-w64-x86_64-libtre + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libtasn1-4.20.0-1-any.pkg.tar.zst" + SHA512 989beaec97ff400127cafb8202f8e181eecb4ca429ac5b90a3a54cde64e030ce29a259e680ebf7dae223c7374c72632f5f33628e0855387a324f46686cfd8a9b + DEPS mingw-w64-x86_64-gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libtre-0.9.0-1-any.pkg.tar.zst" + SHA512 5f1797850ab2da94c213cca8663413419b737a17e6856e1d05bcd8d9397d6e0bdb195798b01cb315c1fcf0cffc22a712f13c10e0b5d4103aecef7cd4518c80fb + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gettext-runtime + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-libwinpthread-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst" + SHA512 011f2719ca60437adf8ea653d78592a407eea67f515135164f7437248dca07b11aa5a6bc4769f507ef1b1a1dd0c5c5144fa99613e3eeb6d44dac4a5b48de73bd + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpc-1.3.1-2-any.pkg.tar.zst" + SHA512 3fe183d4af3b3935a4394502eab75a8f7b7692f551fd44e54c67935a4691388d23a021ee1147f0345ed27ffe8a8db3e9e7e37caf2348df3413e0acd519c12a0c + DEPS mingw-w64-x86_64-gmp mingw-w64-x86_64-mpfr + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpdecimal-4.0.1-1-any.pkg.tar.zst" + SHA512 5a2d1b31cb5029e65c95b00f0614123855774b398335491b1bcf81636d55ff7ad4c5e46199f5b23549dd06c47c04edf19e0be65162f3a54034817e30e9834639 + DEPS mingw-w64-x86_64-gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-mpfr-4.2.2-1-any.pkg.tar.zst" + SHA512 4795debd7e47a1c539d35e3aa3a6948831a7be77ca8b915273eba7f6dc1f951d2c500f988f78321cf96dea40e4ec8c2a463c12fccdb408f424040f61e7395de7 + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-ncurses-6.5.20241228-3-any.pkg.tar.zst" + SHA512 f2930f1eb441686c0403953dd51c664e0ea77f29bcce6c88514ba9510b802e4be4e5ade7da58a989e79d13cc20736e32bf609fb1f297f8949c02326d9800996a + DEPS mingw-w64-x86_64-libsystre + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-openblas-0.3.29-3-any.pkg.tar.zst" + SHA512 040b10db2964a2c94eacdbb2d80b8c42f5ad45113d8b6516a12158b51e80d218d7d67d9c19c193bd24e61c819587679329e093342bff393b2d3c107e899feb09 + DEPS mingw-w64-x86_64-gcc-libgfortran mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-omp + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-openssl-3.5.0-1-any.pkg.tar.zst" + SHA512 ede791eba3b6c82184f9649fcb663c72715e7c5f0fcbda87a1226520439c472458f5a3a0a78d4c0e45fb8de2a091cae741341d13404c3ee1995e183ba2efa825 + #DEPS mingw-w64-x86_64-ca-certificates mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-p11-kit-0.25.5-1-any.pkg.tar.zst" + SHA512 3ecf6cf3f2c774022ed0ae58a1ee63dca84aeabf226b39a69459370d84d13c4ce4e9776be05880ffa7be2da84f504fe051624e1c9378cb49a71e5c0c4d5110e0 + DEPS mingw-w64-x86_64-gettext-runtime mingw-w64-x86_64-libffi mingw-w64-x86_64-libtasn1 + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-3.12.10-1-any.pkg.tar.zst" + SHA512 c156c6e74297a5fdd9c299a361acac47b4a9b32859d1d5373e1cb10a29fa91c26a013674ebaad267e434b5de3e31c1649f0701e8ba12bd4688cea34d63b40488 + PROVIDES mingw-w64-x86_64-python3 mingw-w64-x86_64-python3.12 + DEPS mingw-w64-x86_64-bzip2 mingw-w64-x86_64-expat mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-libffi mingw-w64-x86_64-mpdecimal mingw-w64-x86_64-ncurses mingw-w64-x86_64-openssl mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-tcl mingw-w64-x86_64-tk mingw-w64-x86_64-xz mingw-w64-x86_64-zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-python-numpy-2.2.6-1-any.pkg.tar.zst" + SHA512 f8bfeffdf095e6e0d7e487229cc5475f8a2929902c7cfc4f7c67b7d428adcf80ea88deb6205e84775835d08f7fae53f0b91e4bea816b8dad20f09ad3456bf998 + DEPS mingw-w64-x86_64-openblas mingw-w64-x86_64-python + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-readline-8.2.013-1-any.pkg.tar.zst" + SHA512 282c8eb6d7241cedbce6d352489b75fc352d154ecd0a259b772f45acc29c2a47a610a8043c7635475bed39b2cca9a45c09845c77c655881dbc7403aa12c65c35 + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-termcap + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-sqlite3-3.50.0-1-any.pkg.tar.zst" + SHA512 799bb830dcf74e832fb3840efdee3afe85f11538eeb78cb66a63f29092b1817718508b67f414581dda0fd470947e6a122bfda0f579c62a33731ba65a4f0be6f9 + PROVIDES mingw-w64-x86_64-sqlite mingw-w64-x86_64-sqlite-analyzer + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-readline mingw-w64-x86_64-tcl mingw-w64-x86_64-zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-termcap-1.3.1-7-any.pkg.tar.zst" + SHA512 2610355be441fd933f660f8181a5ad074057361a9aadeaad85961230dcf6df5d5165b94ccf9887144c91812485be57c2d79f39e8191ff525889bdff042d34ce6 + DEPS mingw-w64-x86_64-gcc-libs + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-tcl-8.6.16-1-any.pkg.tar.zst" + SHA512 b36251ad9e5061d332bf9bac80d25ec2b1e7a2ed80a0b88609f7a62b9503b60092ce23ca7ecd39d7a28c44b3e725acb88bb66cfd4e9dec4789d95f3982cba283 + DEPS mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-zlib + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-tk-8.6.16-1-any.pkg.tar.zst" + SHA512 be8a235fc1f1b8ec5a75ece9314c2c02f0d92302837573b9f651cf57ed1e6387b592699429e48a520073f2077c528d3641cae1f9072a9ec568c21196c708af91 + DEPS mingw-w64-x86_64-tcl + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-xz-5.8.1-2-any.pkg.tar.zst" + SHA512 3309afb4e96cab9406753618abd2851c7b9134ad89d52d0379a45763fa245c4e9265f4cb27c34dcccde785c1e2c728e32344caaf14c62575f0269acdc048f6e0 + DEPS mingw-w64-x86_64-gettext-runtime + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-zlib-1.3.1-1-any.pkg.tar.zst" + SHA512 1336cd0db102af495d8bbfc6a1956f365750b19d2377fe809e9b26f61a8a6600394e7343677645c5743f4974161535dad5c0503ff50f6126d27bb927754e7320 + ) +endmacro() diff --git a/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake b/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake new file mode 100644 index 0000000..1ea11a6 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_add_to_path.cmake @@ -0,0 +1,10 @@ +function(vcpkg_add_to_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "PREPEND" "" "")
+ if(arg_PREPEND)
+ set(operation PREPEND)
+ else()
+ set(operation APPEND)
+ endif()
+
+ vcpkg_host_path_list("${operation}" ENV{PATH} ${arg_UNPARSED_ARGUMENTS})
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake b/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake new file mode 100644 index 0000000..1a3756e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_apply_patches.cmake @@ -0,0 +1,17 @@ +function(vcpkg_apply_patches) + z_vcpkg_deprecation_message("vcpkg_apply_patches has been deprecated in favor of the `PATCHES` argument to `vcpkg_from_*`.") + + cmake_parse_arguments(PARSE_ARGV 0 "arg" "QUIET" "SOURCE_PATH" "PATCHES") + + if(arg_QUIET) + set(quiet "QUIET") + else() + set(quiet) + endif() + + z_vcpkg_apply_patches( + SOURCE_PATH "${arg_SOURCE_PATH}" + ${quiet} + PATCHES ${arg_PATCHES} + ) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake b/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake new file mode 100644 index 0000000..63220f4 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_backup_restore_env_vars.cmake @@ -0,0 +1,35 @@ +function(vcpkg_backup_env_variables)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "VARS")
+ if(NOT DEFINED arg_VARS)
+ message(FATAL_ERROR "VARS must be defined.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN LISTS arg_VARS)
+ if(DEFINED ENV{${envvar}})
+ set("z_vcpkg_env_backup_${envvar}" "$ENV{${envvar}}" PARENT_SCOPE)
+ else()
+ unset("z_vcpkg_env_backup_${envvar}" PARENT_SCOPE)
+ endif()
+ endforeach()
+endfunction()
+
+function(vcpkg_restore_env_variables)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "VARS")
+ if(NOT DEFINED arg_VARS)
+ message(FATAL_ERROR "VARS must be defined.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN LISTS arg_VARS)
+ if(DEFINED z_vcpkg_env_backup_${envvar})
+ set("ENV{${envvar}}" "${z_vcpkg_env_backup_${envvar}}")
+ else()
+ unset("ENV{${envvar}}")
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake new file mode 100644 index 0000000..8a8c25e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_cmake.cmake @@ -0,0 +1,95 @@ +function(vcpkg_build_cmake) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "DISABLE_PARALLEL;ADD_BIN_TO_PATH" + "TARGET;LOGFILE_ROOT" + "" + ) + + if(Z_VCPKG_CMAKE_BUILD_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_build_cmake in the same port is unsupported.") + endif() + + if(NOT DEFINED arg_LOGFILE_ROOT) + set(arg_LOGFILE_ROOT "build") + endif() + + vcpkg_list(SET build_param) + vcpkg_list(SET parallel_param) + vcpkg_list(SET no_parallel_param) + + if("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "Ninja") + vcpkg_list(SET build_param "-v") # verbose output + vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}") + vcpkg_list(SET no_parallel_param "-j1") + elseif("${Z_VCPKG_CMAKE_GENERATOR}" MATCHES "^Visual Studio") + vcpkg_list(SET build_param + "/p:VCPkgLocalAppDataDisabled=true" + "/p:UseIntelMKL=No" + ) + vcpkg_list(SET parallel_param "/m") + elseif("${Z_VCPKG_CMAKE_GENERATOR}" STREQUAL "NMake Makefiles") + # No options are currently added for nmake builds + elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Unix Makefiles") + vcpkg_list(SET build_param "VERBOSE=1") + vcpkg_list(SET parallel_param "-j${VCPKG_CONCURRENCY}") + vcpkg_list(SET no_parallel_param "") + elseif(Z_VCPKG_CMAKE_GENERATOR STREQUAL "Xcode") + vcpkg_list(SET parallel_param -jobs "${VCPKG_CONCURRENCY}") + vcpkg_list(SET no_parallel_param -jobs 1) + else() + message(FATAL_ERROR "Unrecognized GENERATOR setting from vcpkg_configure_cmake(). Valid generators are: Ninja, Visual Studio, and NMake Makefiles") + endif() + + vcpkg_list(SET target_param) + if(arg_TARGET) + vcpkg_list(SET target_param "--target" "${arg_TARGET}") + endif() + + foreach(build_type IN ITEMS debug release) + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "${build_type}") + if("${build_type}" STREQUAL "debug") + set(short_build_type "dbg") + set(config "Debug") + else() + set(short_build_type "rel") + set(config "Release") + endif() + + message(STATUS "Building ${TARGET_TRIPLET}-${short_build_type}") + + if(arg_ADD_BIN_TO_PATH) + vcpkg_backup_env_variables(VARS PATH) + if("${build_type}" STREQUAL "debug") + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin") + else() + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin") + endif() + endif() + + if(arg_DISABLE_PARALLEL) + vcpkg_execute_build_process( + COMMAND + "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param} + -- ${build_param} ${no_parallel_param} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}" + LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_build_type}" + ) + else() + vcpkg_execute_build_process( + COMMAND + "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param} + -- ${build_param} ${parallel_param} + NO_PARALLEL_COMMAND + "${CMAKE_COMMAND}" --build . --config "${config}" ${target_param} + -- ${build_param} ${no_parallel_param} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_build_type}" + LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_build_type}" + ) + endif() + + if(arg_ADD_BIN_TO_PATH) + vcpkg_restore_env_variables(VARS PATH) + endif() + endif() + endforeach() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_build_make.cmake b/vcpkg/scripts/cmake/vcpkg_build_make.cmake new file mode 100644 index 0000000..7e54ced --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_make.cmake @@ -0,0 +1,193 @@ +function(vcpkg_build_make)
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ include("${cmake_vars_file}")
+
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ADD_BIN_TO_PATH;ENABLE_INSTALL;DISABLE_PARALLEL"
+ "LOGFILE_ROOT;BUILD_TARGET;SUBPATH;MAKEFILE;INSTALL_TARGET"
+ "OPTIONS"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "vcpkg_make_build was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_LOGFILE_ROOT)
+ set(arg_LOGFILE_ROOT "build")
+ endif()
+
+ if(NOT DEFINED arg_BUILD_TARGET)
+ set(arg_BUILD_TARGET "all")
+ endif()
+
+ if (NOT DEFINED arg_MAKEFILE)
+ set(arg_MAKEFILE Makefile)
+ endif()
+
+ if(NOT DEFINED arg_INSTALL_TARGET)
+ set(arg_INSTALL_TARGET "install")
+ endif()
+
+ if(CMAKE_HOST_WIN32)
+ set(Z_VCPKG_INSTALLED "${CURRENT_INSTALLED_DIR}")
+ else()
+ string(REPLACE " " "\ " Z_VCPKG_INSTALLED "${CURRENT_INSTALLED_DIR}")
+ endif()
+
+ vcpkg_list(SET make_opts)
+ vcpkg_list(SET install_opts)
+ if (CMAKE_HOST_WIN32)
+ set(path_backup "$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${SCRIPTS}/buildsystems/make_wrapper")
+ if(NOT DEFINED Z_VCPKG_MAKE)
+ vcpkg_acquire_msys(MSYS_ROOT)
+ find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
+ endif()
+ set(make_command "${Z_VCPKG_MAKE}")
+ vcpkg_list(SET make_opts ${arg_OPTIONS} -j ${VCPKG_CONCURRENCY} --trace -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET no_parallel_make_opts ${arg_OPTIONS} -j 1 --trace -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+
+ string(REPLACE " " [[\ ]] vcpkg_package_prefix "${CURRENT_PACKAGES_DIR}")
+ string(REGEX REPLACE [[([a-zA-Z]):/]] [[/\1/]] vcpkg_package_prefix "${vcpkg_package_prefix}")
+ vcpkg_list(SET install_opts -j ${VCPKG_CONCURRENCY} --trace -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${vcpkg_package_prefix})
+ vcpkg_list(SET no_parallel_install_opts -j 1 --trace -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${vcpkg_package_prefix})
+ #TODO: optimize for install-data (release) and install-exec (release/debug)
+
+ else()
+ if(VCPKG_HOST_IS_FREEBSD OR VCPKG_HOST_IS_OPENBSD)
+ find_program(Z_VCPKG_MAKE gmake REQUIRED)
+ else()
+ find_program(Z_VCPKG_MAKE make REQUIRED)
+ endif()
+ set(make_command "${Z_VCPKG_MAKE}")
+ vcpkg_list(SET make_opts ${arg_OPTIONS} V=1 -j ${VCPKG_CONCURRENCY} -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET no_parallel_make_opts ${arg_OPTIONS} V=1 -j 1 -f ${arg_MAKEFILE} ${arg_BUILD_TARGET})
+ vcpkg_list(SET install_opts -j ${VCPKG_CONCURRENCY} -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${CURRENT_PACKAGES_DIR})
+ vcpkg_list(SET no_parallel_install_opts -j 1 -f ${arg_MAKEFILE} ${arg_INSTALL_TARGET} DESTDIR=${CURRENT_PACKAGES_DIR})
+ endif()
+
+ # Since includes are buildtype independent those are setup by vcpkg_configure_make
+ vcpkg_backup_env_variables(VARS LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH CPPFLAGS CFLAGS CXXFLAGS RCFLAGS)
+
+ z_vcpkg_configure_make_common_definitions()
+
+ foreach(buildtype IN ITEMS "debug" "release")
+ if (buildtype STREQUAL "debug" AND _VCPKG_MAKE_NO_DEBUG)
+ continue()
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "${buildtype}")
+ string(TOUPPER "${buildtype}" cmake_buildtype)
+ set(short_buildtype "${short_name_${cmake_buildtype}}")
+ set(path_suffix "${path_suffix_${cmake_buildtype}}")
+
+ set(working_directory "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_buildtype}/${arg_SUBPATH}")
+ message(STATUS "Building ${TARGET_TRIPLET}-${short_buildtype}")
+
+ if("libtool-link-pass-target" IN_LIST VCPKG_BUILD_MAKE_FIXUP)
+ # Pass --target to the linker, e.g. for Android
+ file(GLOB_RECURSE libtool_files "${working_directory}/libtool")
+ foreach(file IN LISTS libtool_files)
+ vcpkg_replace_string("${file}" [[-xtarget=*|]] [[-xtarget=*|--target=*|]])
+ endforeach()
+ endif()
+
+ z_vcpkg_configure_make_process_flags("${cmake_buildtype}")
+
+ # Setup environment
+ set(ENV{CPPFLAGS} "${CPPFLAGS_${cmake_buildtype}}")
+ set(ENV{CFLAGS} "${CFLAGS_${cmake_buildtype}}")
+ set(ENV{CXXFLAGS} "${CXXFLAGS_${cmake_buildtype}}")
+ set(ENV{RCFLAGS} "${VCPKG_DETECTED_CMAKE_RC_FLAGS_${cmake_buildtype}}")
+ set(ENV{LDFLAGS} "${LDFLAGS_${cmake_buildtype}}")
+ vcpkg_list(APPEND lib_env_vars LIB LIBPATH LIBRARY_PATH) # LD_LIBRARY_PATH)
+ foreach(lib_env_var IN LISTS lib_env_vars)
+ if(EXISTS "${Z_VCPKG_INSTALLED}${path_suffix}/lib")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${Z_VCPKG_INSTALLED}${path_suffix}/lib")
+ endif()
+ if(EXISTS "${Z_VCPKG_INSTALLED}${path_suffix}/lib/manual-link")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${Z_VCPKG_INSTALLED}${path_suffix}/lib/manual-link")
+ endif()
+ endforeach()
+ unset(lib_env_vars)
+
+ if(LINK_ENV_${cmake_buildtype})
+ set(config_link_backup "$ENV{_LINK_}")
+ set(ENV{_LINK_} "${LINK_ENV_${cmake_buildtype}}")
+ else()
+ unset(config_link_backup)
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(env_backup_path "$ENV{PATH}")
+ vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}${path_suffix}/bin")
+ endif()
+
+ vcpkg_list(SET make_cmd_line ${make_command} ${make_opts})
+ vcpkg_list(SET no_parallel_make_cmd_line ${make_command} ${no_parallel_make_opts})
+
+ if (arg_DISABLE_PARALLEL)
+ vcpkg_execute_build_process(
+ COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ else()
+ vcpkg_execute_build_process(
+ COMMAND ${make_cmd_line}
+ NO_PARALLEL_COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ endif()
+
+ file(READ "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${TARGET_TRIPLET}-${short_buildtype}-out.log" logdata)
+ if(logdata MATCHES "Warning: linker path does not have real file for library")
+ message(FATAL_ERROR "libtool could not find a file being linked against!")
+ endif()
+
+ if (arg_ENABLE_INSTALL)
+ message(STATUS "Installing ${TARGET_TRIPLET}-${short_buildtype}")
+ vcpkg_list(SET make_cmd_line ${make_command} ${install_opts})
+ vcpkg_list(SET no_parallel_make_cmd_line ${make_command} ${no_parallel_install_opts})
+ vcpkg_execute_build_process(
+ COMMAND ${make_cmd_line}
+ NO_PARALLEL_COMMAND ${no_parallel_make_cmd_line}
+ WORKING_DIRECTORY "${working_directory}"
+ LOGNAME "install-${TARGET_TRIPLET}-${short_buildtype}"
+ )
+ endif()
+
+ if(DEFINED config_link_backup)
+ set(ENV{_LINK_} "${config_link_backup}")
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${env_backup_path}")
+ endif()
+ endif()
+
+ vcpkg_restore_env_variables(VARS LIB LIBPATH LIBRARY_PATH)
+ endforeach()
+
+ if (arg_ENABLE_INSTALL)
+ string(REGEX REPLACE "([a-zA-Z]):/" "/\\1/" Z_VCPKG_INSTALL_PREFIX "${CURRENT_INSTALLED_DIR}")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}_tmp")
+ file(RENAME "${CURRENT_PACKAGES_DIR}" "${CURRENT_PACKAGES_DIR}_tmp")
+ file(RENAME "${CURRENT_PACKAGES_DIR}_tmp${Z_VCPKG_INSTALL_PREFIX}" "${CURRENT_PACKAGES_DIR}")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}_tmp")
+ endif()
+
+ # Remove libtool files since they contain absolute paths and are not necessary.
+ file(GLOB_RECURSE libtool_files "${CURRENT_PACKAGES_DIR}/**/*.la")
+ if(libtool_files)
+ file(REMOVE ${libtool_files})
+ endif()
+
+ if (CMAKE_HOST_WIN32)
+ set(ENV{PATH} "${path_backup}")
+ endif()
+
+ vcpkg_restore_env_variables(VARS LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH CPPFLAGS CFLAGS CXXFLAGS RCFLAGS)
+ unset(_VCPKG_MAKE_NO_DEBUG PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake new file mode 100644 index 0000000..90fb313 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_msbuild.cmake @@ -0,0 +1,87 @@ +function(vcpkg_build_msbuild) + cmake_parse_arguments( + PARSE_ARGV 0 + arg + "USE_VCPKG_INTEGRATION" + "PROJECT_PATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET" + "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_build_msbuild was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT DEFINED arg_RELEASE_CONFIGURATION) + set(arg_RELEASE_CONFIGURATION Release) + endif() + if(NOT DEFINED arg_DEBUG_CONFIGURATION) + set(arg_DEBUG_CONFIGURATION Debug) + endif() + if(NOT DEFINED arg_PLATFORM) + set(arg_PLATFORM "${TRIPLET_SYSTEM_ARCH}") + endif() + if(NOT DEFINED arg_PLATFORM_TOOLSET) + set(arg_PLATFORM_TOOLSET "${VCPKG_PLATFORM_TOOLSET}") + endif() + if(NOT DEFINED arg_TARGET_PLATFORM_VERSION) + vcpkg_get_windows_sdk(arg_TARGET_PLATFORM_VERSION) + endif() + if(NOT DEFINED arg_TARGET) + set(arg_TARGET Rebuild) + endif() + + list(APPEND arg_OPTIONS + "/t:${arg_TARGET}" + "/p:Platform=${arg_PLATFORM}" + "/p:PlatformToolset=${arg_PLATFORM_TOOLSET}" + "/p:VCPkgLocalAppDataDisabled=true" + "/p:UseIntelMKL=No" + "/p:WindowsTargetPlatformVersion=${arg_TARGET_PLATFORM_VERSION}" + "/p:VcpkgManifestInstall=false" + "/p:VcpkgManifestEnabled=false" + "/m" + ) + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions + # TODO: Add a way for the user to override this if they want to opt-in to incompatibility + list(APPEND arg_OPTIONS "/p:WholeProgramOptimization=false") + endif() + + if(arg_USE_VCPKG_INTEGRATION) + list( + APPEND arg_OPTIONS + "/p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets" + "/p:VcpkgTriplet=${TARGET_TRIPLET}" + "/p:VcpkgInstalledDir=${_VCPKG_INSTALLED_DIR}" + ) + else() + list(APPEND arg_OPTIONS "/p:VcpkgEnabled=false") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + message(STATUS "Building ${arg_PROJECT_PATH} for Release") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + vcpkg_execute_required_process( + COMMAND msbuild "${arg_PROJECT_PATH}" + "/p:Configuration=${arg_RELEASE_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_RELEASE} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" + LOGNAME "build-${TARGET_TRIPLET}-rel" + ) + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + message(STATUS "Building ${arg_PROJECT_PATH} for Debug") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + vcpkg_execute_required_process( + COMMAND msbuild "${arg_PROJECT_PATH}" + "/p:Configuration=${arg_DEBUG_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_DEBUG} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" + LOGNAME "build-${TARGET_TRIPLET}-dbg" + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake b/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake new file mode 100644 index 0000000..a06f350 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_ninja.cmake @@ -0,0 +1,30 @@ +function(z_vcpkg_build_ninja_build config targets) + message(STATUS "Building (${config})...") + vcpkg_execute_build_process( + COMMAND "${NINJA}" -C "${CURRENT_BUILDTREES_DIR}/${config}" ${targets} + WORKING_DIRECTORY "${SOURCE_PATH}" + LOGNAME "build-${config}" + ) +endfunction() + + +function(vcpkg_build_ninja) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "TARGETS") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_TARGETS) + set(arg_TARGETS "") + endif() + + vcpkg_find_acquire_program(NINJA) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + z_vcpkg_build_ninja_build("${TARGET_TRIPLET}-dbg" "${arg_TARGETS}") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + z_vcpkg_build_ninja_build("${TARGET_TRIPLET}-rel" "${arg_TARGETS}") + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake new file mode 100755 index 0000000..ffc68d8 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_nmake.cmake @@ -0,0 +1,166 @@ +function(vcpkg_build_nmake)
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "ADD_BIN_TO_PATH;ENABLE_INSTALL;NO_DEBUG;PREFER_JOM"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;LOGFILE_ROOT;CL_LANGUAGE"
+ "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;PRERUN_SHELL;PRERUN_SHELL_DEBUG;PRERUN_SHELL_RELEASE;TARGET"
+ )
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified")
+ endif()
+
+ if(arg_NO_DEBUG)
+ message(WARNING "NO_DEBUG argument to ${CMAKE_CURRENT_FUNCTION} is deprecated")
+ endif()
+ if(arg_ADD_BIN_TO_PATH)
+ message(WARNING "ADD_BIN_TO_PATH argument to ${CMAKE_CURRENT_FUNCTION} is deprecated - it never did anything")
+ endif()
+
+ if(NOT VCPKG_HOST_IS_WINDOWS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} only support windows.")
+ endif()
+
+ if(NOT DEFINED arg_LOGFILE_ROOT)
+ set(arg_LOGFILE_ROOT "build")
+ endif()
+ if(NOT DEFINED arg_PROJECT_NAME)
+ set(arg_PROJECT_NAME makefile.vc)
+ endif()
+
+ if(NOT DEFINED arg_TARGET)
+ vcpkg_list(SET arg_TARGET all)
+ endif()
+ if(arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND arg_TARGET install)
+ endif()
+
+ if(NOT DEFINED arg_CL_LANGUAGE)
+ set(arg_CL_LANGUAGE CXX)
+ endif()
+
+ find_program(NMAKE nmake REQUIRED)
+ get_filename_component(NMAKE_EXE_PATH "${NMAKE}" DIRECTORY)
+ # Load toolchains
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ debug_message("Including cmake vars from: ${cmake_vars_file}")
+ include("${cmake_vars_file}")
+ # Set needed env
+ set(ENV{PATH} "$ENV{PATH};${NMAKE_EXE_PATH}")
+ set(ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include;$ENV{INCLUDE}")
+ # Set make options
+ vcpkg_list(SET make_opts_base /NOLOGO /G /U /F "${arg_PROJECT_NAME}" ${arg_TARGET})
+
+ if(arg_PREFER_JOM AND VCPKG_CONCURRENCY GREATER "1")
+ vcpkg_find_acquire_program(JOM)
+ get_filename_component(JOM_EXE_PATH "${JOM}" DIRECTORY)
+ vcpkg_add_to_path("${JOM_EXE_PATH}")
+ if(arg_CL_LANGUAGE AND "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_COMPILER_ID}" STREQUAL "MSVC")
+ string(REGEX REPLACE " [/-]MP[0-9]* " " " VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG " ${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG} /FS")
+ string(REGEX REPLACE " [/-]MP[0-9]* " " " VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE " ${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE} /FS")
+ endif()
+ else()
+ set(arg_PREFER_JOM FALSE)
+ endif()
+
+ # Add subpath to work directory
+ if(DEFINED arg_PROJECT_SUBPATH)
+ set(project_subpath "/${arg_PROJECT_SUBPATH}")
+ else()
+ set(project_subpath "")
+ endif()
+
+ vcpkg_backup_env_variables(VARS _CL_ LINK)
+ cmake_path(NATIVE_PATH CURRENT_PACKAGES_DIR NORMALIZE install_dir_native)
+ foreach(build_type IN ITEMS debug release)
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL build_type)
+ if(build_type STREQUAL "debug")
+ # Generate obj dir suffix
+ set(short_build_type "-dbg")
+ # Add install command and arguments
+ set(make_opts "${make_opts_base}")
+ if (arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND make_opts "INSTALLDIR=${install_dir_native}\\debug")
+ endif()
+ vcpkg_list(APPEND make_opts ${arg_OPTIONS} ${arg_OPTIONS_DEBUG})
+ if(NOT arg_CL_LANGUAGE STREQUAL "NONE")
+ set(ENV{_CL_} "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_DEBUG}")
+ endif()
+ set(ENV{_LINK_} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}")
+
+ set(prerun_variable_name arg_PRERUN_SHELL_DEBUG)
+ else()
+ set(short_build_type "-rel")
+ # Add install command and arguments
+ set(make_opts "${make_opts_base}")
+ if (arg_ENABLE_INSTALL)
+ vcpkg_list(APPEND make_opts "INSTALLDIR=${install_dir_native}")
+ endif()
+ vcpkg_list(APPEND make_opts ${arg_OPTIONS} ${arg_OPTIONS_RELEASE})
+
+ if(NOT arg_CL_LANGUAGE STREQUAL "NONE")
+ set(ENV{_CL_} "${VCPKG_DETECTED_CMAKE_${arg_CL_LANGUAGE}_FLAGS_RELEASE}")
+ endif()
+ set(ENV{_LINK_} "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
+ set(prerun_variable_name arg_PRERUN_SHELL_RELEASE)
+ endif()
+
+ set(triplet_and_build_type "${TARGET_TRIPLET}${short_build_type}")
+ set(object_dir "${CURRENT_BUILDTREES_DIR}/${triplet_and_build_type}")
+
+ file(REMOVE_RECURSE "${object_dir}")
+ file(COPY "${arg_SOURCE_PATH}/" DESTINATION "${object_dir}")
+
+ if(DEFINED arg_PRERUN_SHELL)
+ message(STATUS "Prerunning ${triplet_and_build_type}")
+ vcpkg_execute_required_process(
+ COMMAND ${arg_PRERUN_SHELL}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "prerun-${triplet_and_build_type}"
+ )
+ endif()
+ if(DEFINED "${prerun_variable_name}")
+ message(STATUS "Prerunning ${triplet_and_build_type}")
+ vcpkg_execute_required_process(
+ COMMAND ${${prerun_variable_name}}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "prerun-specific-${triplet_and_build_type}"
+ )
+ endif()
+
+ if (NOT arg_ENABLE_INSTALL)
+ message(STATUS "Building ${triplet_and_build_type}")
+ else()
+ message(STATUS "Building and installing ${triplet_and_build_type}")
+ endif()
+
+ set(run_nmake TRUE)
+ set(tool_suffix "")
+ if(arg_PREFER_JOM)
+ execute_process(
+ COMMAND "${JOM}" /K /J ${VCPKG_CONCURRENCY} ${make_opts}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${triplet_and_build_type}-jom-out.log"
+ ERROR_FILE "${CURRENT_BUILDTREES_DIR}/${arg_LOGFILE_ROOT}-${triplet_and_build_type}-jom-err.log"
+ RESULT_VARIABLE error_code
+ )
+ if(error_code EQUAL "0")
+ set(run_nmake FALSE)
+ else()
+ message(STATUS "Restarting build without parallelism")
+ set(tool_suffix "-nmake")
+ endif()
+ endif()
+ if(run_nmake)
+ vcpkg_execute_build_process(
+ COMMAND "${NMAKE}" ${make_opts}
+ WORKING_DIRECTORY "${object_dir}${project_subpath}"
+ LOGNAME "${arg_LOGFILE_ROOT}-${triplet_and_build_type}${tool_suffix}"
+ )
+ endif()
+
+ vcpkg_restore_env_variables(VARS _CL_ LINK)
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake new file mode 100644 index 0000000..248af60 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_build_qmake.cmake @@ -0,0 +1,82 @@ +function(z_run_jom_build invoke_command targets log_prefix log_suffix) + message(STATUS "Package ${log_prefix}-${TARGET_TRIPLET}-${log_suffix}") + vcpkg_execute_build_process( + COMMAND "${invoke_command}" -j ${VCPKG_CONCURRENCY} ${targets} + NO_PARALLEL_COMMAND "${invoke_command}" -j 1 ${targets} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${log_suffix}" + LOGNAME "package-${log_prefix}-${TARGET_TRIPLET}-${log_suffix}" + ) +endfunction() + +function(vcpkg_build_qmake) + # parse parameters such that semicolons in options arguments to COMMAND don't get erased + cmake_parse_arguments(PARSE_ARGV 0 arg + "SKIP_MAKEFILES" + "BUILD_LOGNAME" + "TARGETS;RELEASE_TARGETS;DEBUG_TARGETS" + ) + + # Make sure that the linker finds the libraries used + vcpkg_backup_env_variables(VARS PATH LD_LIBRARY_PATH CL _CL_) + + # This fixes issues on machines with default codepages that are not ASCII compatible, such as some CJK encodings + set(ENV{_CL_} "/utf-8") + + if(CMAKE_HOST_WIN32) + if(VCPKG_TARGET_IS_MINGW) + find_program(MINGW32_MAKE mingw32-make REQUIRED) + set(invoke_command "${MINGW32_MAKE}") + elseif (VCPKG_QMAKE_USE_NMAKE) + find_program(NMAKE nmake) + set(invoke_command "${NMAKE}") + get_filename_component(nmake_exe_path "${NMAKE}" DIRECTORY) + vcpkg_host_path_list(APPEND ENV{PATH} "${nmake_exe_path}") + set(ENV{CL} "$ENV{CL} /MP${VCPKG_CONCURRENCY}") + else() + vcpkg_find_acquire_program(JOM) + set(invoke_command "${JOM}") + endif() + else() + find_program(MAKE make) + set(invoke_command "${MAKE}") + endif() + + if(NOT DEFINED arg_BUILD_LOGNAME) + set(arg_BUILD_LOGNAME build) + endif() + + set(short_name_debug "dbg") + set(path_suffix_debug "/debug") + set(targets_debug "${arg_DEBUG_TARGETS}") + + set(short_name_release "rel") + set(path_suffix_release "") + set(targets_release "${arg_RELEASE_TARGETS}") + + if(NOT DEFINED VCPKG_BUILD_TYPE) + set(items debug release) + else() + set(items release) + endif() + foreach(build_type IN ITEMS ${items}) + set(current_installed_prefix "${CURRENT_INSTALLED_DIR}${path_suffix_${build_type}}") + + vcpkg_add_to_path(PREPEND "${current_installed_prefix}/lib" "${current_installed_prefix}/bin") + + # We set LD_LIBRARY_PATH ENV variable to allow executing Qt tools (rcc,...) even with dynamic linking + if(CMAKE_HOST_UNIX) + set(ENV{LD_LIBRARY_PATH} "") + vcpkg_host_path_list(APPEND ENV{LD_LIBRARY_PATH} "${current_installed_prefix}/lib" "${current_installed_prefix}/lib/manual-link") + endif() + + vcpkg_list(SET targets ${targets_${build_type}} ${arg_TARGETS}) + if(NOT arg_SKIP_MAKEFILES) + z_run_jom_build("${invoke_command}" qmake_all makefiles "${short_name_${build_type}}") + endif() + z_run_jom_build("${invoke_command}" "${targets}" "${arg_BUILD_LOGNAME}" "${short_name_${build_type}}") + + vcpkg_restore_env_variables(VARS PATH LD_LIBRARY_PATH) + endforeach() + + vcpkg_restore_env_variables(VARS CL _CL_) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake b/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake new file mode 100644 index 0000000..bb7d684 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_buildpath_length_warning.cmake @@ -0,0 +1,8 @@ +function(vcpkg_buildpath_length_warning warning_length)
+ string(LENGTH "${CURRENT_BUILDTREES_DIR}" buildtrees_path_length)
+ if(buildtrees_path_length GREATER warning_length AND CMAKE_HOST_WIN32)
+ message(WARNING "${PORT}'s buildsystem uses very long paths and may fail on your system.\n"
+ "We recommend moving vcpkg to a short path such as 'C:\\src\\vcpkg' or using the subst command."
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_check_features.cmake b/vcpkg/scripts/cmake/vcpkg_check_features.cmake new file mode 100644 index 0000000..c6bec1f --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_check_features.cmake @@ -0,0 +1,96 @@ +function(z_vcpkg_check_features_last_feature out_var features_name features_list) + list(LENGTH features_list features_length) + math(EXPR features_length_mod_2 "${features_length} % 2") + if(NOT features_length_mod_2 EQUAL 0) + message(FATAL_ERROR "vcpkg_check_features has an incorrect number of arguments to ${features_name}") + endif() + + math(EXPR last_feature "${features_length} / 2 - 1") + set("${out_var}" "${last_feature}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_check_features_get_feature idx features_list out_feature_name out_feature_var) + math(EXPR feature_name_idx "${idx} * 2") + math(EXPR feature_var_idx "${feature_name_idx} + 1") + + list(GET features_list "${feature_name_idx}" feature_name) + list(GET features_list "${feature_var_idx}" feature_var) + + set("${out_feature_name}" "${feature_name}" PARENT_SCOPE) + set("${out_feature_var}" "${feature_var}" PARENT_SCOPE) +endfunction() + +function(vcpkg_check_features) + cmake_parse_arguments( + PARSE_ARGV 0 "arg" + "" + "OUT_FEATURE_OPTIONS;PREFIX" + "FEATURES;INVERTED_FEATURES" + ) + + if(NOT DEFINED arg_OUT_FEATURE_OPTIONS) + message(FATAL_ERROR "OUT_FEATURE_OPTIONS must be defined.") + endif() + if(NOT DEFINED arg_PREFIX) + set(prefix "") + else() + set(prefix "${arg_PREFIX}_") + endif() + + set(feature_options) + set(feature_variables) + + if(NOT DEFINED arg_FEATURES AND NOT DEFINED arg_INVERTED_FEATURES) + message(DEPRECATION +"calling `vcpkg_check_features` without the `FEATURES` keyword has been deprecated. + Please add the `FEATURES` keyword to the call.") + set(arg_FEATURES "${arg_UNPARSED_ARGUMENTS}") + elseif(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "vcpkg_check_features called with unknown arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + + + z_vcpkg_check_features_last_feature(last_feature "FEATURES" "${arg_FEATURES}") + if(last_feature GREATER_EQUAL 0) + foreach(feature_pair_idx RANGE "${last_feature}") + z_vcpkg_check_features_get_feature("${feature_pair_idx}" "${arg_FEATURES}" feature_name feature_var) + + list(APPEND feature_variables "${feature_var}") + if(feature_name IN_LIST FEATURES) + list(APPEND feature_options "-D${feature_var}=ON") + set("${prefix}${feature_var}" ON PARENT_SCOPE) + else() + list(APPEND feature_options "-D${feature_var}=OFF") + set("${prefix}${feature_var}" OFF PARENT_SCOPE) + endif() + endforeach() + endif() + + z_vcpkg_check_features_last_feature(last_inverted_feature "INVERTED_FEATURES" "${arg_INVERTED_FEATURES}") + if(last_inverted_feature GREATER_EQUAL 0) + foreach(feature_pair_idx RANGE "${last_inverted_feature}") + z_vcpkg_check_features_get_feature("${feature_pair_idx}" "${arg_INVERTED_FEATURES}" feature_name feature_var) + + list(APPEND feature_variables "${feature_var}") + if(feature_name IN_LIST FEATURES) + list(APPEND feature_options "-D${feature_var}=OFF") + set("${prefix}${feature_var}" OFF PARENT_SCOPE) + else() + list(APPEND feature_options "-D${feature_var}=ON") + set("${prefix}${feature_var}" ON PARENT_SCOPE) + endif() + endforeach() + endif() + + list(SORT feature_variables) + set(last_variable) + foreach(variable IN LISTS feature_variables) + if(variable STREQUAL last_variable) + message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_check_features passed the same feature variable multiple times: '${variable}'") + endif() + set(last_variable ${variable}) + endforeach() + + set("${arg_OUT_FEATURE_OPTIONS}" "${feature_options}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake b/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake new file mode 100644 index 0000000..80070ca --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_check_linkage.cmake @@ -0,0 +1,47 @@ +function(vcpkg_check_linkage) + cmake_parse_arguments(PARSE_ARGV 0 arg + "ONLY_STATIC_LIBRARY;ONLY_DYNAMIC_LIBRARY;ONLY_DYNAMIC_CRT;ONLY_STATIC_CRT" + "" + "" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(arg_ONLY_STATIC_LIBRARY AND arg_ONLY_DYNAMIC_LIBRARY) + message(FATAL_ERROR "Requesting both ONLY_STATIC_LIBRARY and ONLY_DYNAMIC_LIBRARY; this is an error.") + endif() + if(arg_ONLY_STATIC_CRT AND arg_ONLY_DYNAMIC_CRT) + message(FATAL_ERROR "Requesting both ONLY_STATIC_CRT and ONLY_DYNAMIC_CRT; this is an error.") + endif() + + if(arg_ONLY_STATIC_LIBRARY AND "${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic") + message(STATUS "Note: ${PORT} only supports static library linkage. Building static library.") + set(VCPKG_LIBRARY_LINKAGE static PARENT_SCOPE) + elseif(arg_ONLY_DYNAMIC_LIBRARY AND "${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static") + if("${VCPKG_CRT_LINKAGE}" STREQUAL "static") + message(FATAL_ERROR "This port can only build as a dynamic library, but the triplet \ +selects a static library and a static CRT. Building a dynamic library with a static CRT creates \ +conditions many developers find surprising, and for which most ports are unprepared. Therefore, \ +vcpkg fails rather than changing VCPKG_LIBRARY_LINKAGE to dynamic.\ + +Consider choosing a triplet that sets VCPKG_CRT_LINKAGE to dynamic. For more information, \ +explicitly requesting this configuration in a custom triplet, please see \ +https://learn.microsoft.com/vcpkg/maintainers/functions/vcpkg_check_linkage?WT.mc_id=vcpkg_inproduct_cli#notes \ + +If you can edit the port calling vcpkg_check_linkage that emits this message, consider adding \ +!(static & staticcrt) to the \"supports\" expression so that this combination can fail early.") + else() + message(STATUS "Note: ${PORT} only supports dynamic library linkage. Building dynamic library.") + endif() + + set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE) + endif() + + if(arg_ONLY_DYNAMIC_CRT AND "${VCPKG_CRT_LINKAGE}" STREQUAL "static") + message(FATAL_ERROR "${PORT} only supports dynamic crt linkage") + elseif(arg_ONLY_STATIC_CRT AND "${VCPKG_CRT_LINKAGE}" STREQUAL "dynamic") + message(FATAL_ERROR "${PORT} only supports static crt linkage") + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake b/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake new file mode 100644 index 0000000..f3c7a75 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_clean_executables_in_bin.cmake @@ -0,0 +1,46 @@ +function(z_vcpkg_clean_executables_in_bin_remove_directory_if_empty directory)
+ if(NOT EXISTS "${directory}")
+ return()
+ endif()
+
+ if(NOT IS_DIRECTORY "${directory}")
+ message(FATAL_ERROR "${directory} must be a directory")
+ endif()
+
+ file(GLOB items "${directory}/*")
+ if("${items}" STREQUAL "")
+ file(REMOVE_RECURSE "${directory}")
+ endif()
+endfunction()
+
+
+function(vcpkg_clean_executables_in_bin)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "" "FILE_NAMES")
+
+ if(NOT DEFINED arg_FILE_NAMES)
+ message(FATAL_ERROR "FILE_NAMES must be specified.")
+ endif()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+
+ foreach(file_name IN LISTS arg_FILE_NAMES)
+ file(REMOVE
+ "${CURRENT_PACKAGES_DIR}/bin/${file_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}"
+ "${CURRENT_PACKAGES_DIR}/bin/${file_name}.pdb"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}.pdb"
+ )
+ if(NOT VCPKG_TARGET_BUNDLE_SUFFIX STREQUAL "")
+ file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/bin/${file_name}${VCPKG_TARGET_BUNDLE_SUFFIX}"
+ "${CURRENT_PACKAGES_DIR}/debug/bin/${file_name}${VCPKG_TARGET_BUNDLE_SUFFIX}"
+ )
+ endif()
+ endforeach()
+
+ z_vcpkg_clean_executables_in_bin_remove_directory_if_empty("${CURRENT_PACKAGES_DIR}/bin")
+ z_vcpkg_clean_executables_in_bin_remove_directory_if_empty("${CURRENT_PACKAGES_DIR}/debug/bin")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake new file mode 100644 index 0000000..904f40a --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_clean_msbuild.cmake @@ -0,0 +1,9 @@ +function(vcpkg_clean_msbuild) + if(NOT ARGC EQUAL 0) + message(WARNING "vcpkg_clean_msbuild was passed extra arguments: ${ARGV}") + endif() + file(REMOVE_RECURSE + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" + ) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake b/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake new file mode 100644 index 0000000..d5da867 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_common_definitions.cmake @@ -0,0 +1,220 @@ +string(COMPARE NOTEQUAL "${TARGET_TRIPLET}" "${HOST_TRIPLET}" VCPKG_CROSSCOMPILING) +#Helper variable to identify the Target system. VCPKG_TARGET_IS_<targetname> +if (NOT DEFINED VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_CMAKE_SYSTEM_NAME STREQUAL "") + set(VCPKG_TARGET_IS_WINDOWS ON) + + if(DEFINED VCPKG_XBOX_CONSOLE_TARGET AND NOT "${VCPKG_XBOX_CONSOLE_TARGET}" STREQUAL "") + set(VCPKG_TARGET_IS_XBOX ON) + endif() +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") + set(VCPKG_TARGET_IS_WINDOWS ON) + set(VCPKG_TARGET_IS_UWP ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Darwin") + set(VCPKG_TARGET_IS_OSX ON) + set(VCPKG_TARGET_IS_APPLE ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "iOS") + set(VCPKG_TARGET_IS_IOS ON) + set(VCPKG_TARGET_IS_APPLE ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "watchOS") + set(VCPKG_TARGET_IS_WATCHOS ON) + set(VCPKG_TARGET_IS_APPLE ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "tvOS") + set(VCPKG_TARGET_IS_TVOS ON) + set(VCPKG_TARGET_IS_APPLE ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "visionOS") + set(VCPKG_TARGET_IS_VISIONOS ON) + set(VCPKG_TARGET_IS_APPLE ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(VCPKG_TARGET_IS_LINUX ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Android") + set(VCPKG_TARGET_IS_ANDROID ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "FreeBSD") + set(VCPKG_TARGET_IS_FREEBSD ON) + set(VCPKG_TARGET_IS_BSD ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "OpenBSD") + set(VCPKG_TARGET_IS_OPENBSD ON) + set(VCPKG_TARGET_IS_BSD ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "NetBSD") + set(VCPKG_TARGET_IS_NETBSD ON) + set(VCPKG_TARGET_IS_BSD ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "SunOS") + set(VCPKG_TARGET_IS_SOLARIS ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "MinGW") + set(VCPKG_TARGET_IS_WINDOWS ON) + set(VCPKG_TARGET_IS_MINGW ON) +elseif(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Emscripten") + set(VCPKG_TARGET_IS_EMSCRIPTEN ON) +endif() + +#Helper variables to identify the host system name +if (CMAKE_HOST_WIN32) + set(VCPKG_HOST_IS_WINDOWS ON) +elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(VCPKG_HOST_IS_OSX ON) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(VCPKG_HOST_IS_LINUX ON) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD") + set(VCPKG_HOST_IS_FREEBSD ON) + set(VCPKG_HOST_IS_BSD ON) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD") + set(VCPKG_HOST_IS_OPENBSD ON) + set(VCPKG_HOST_IS_BSD ON) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "NetBSD") + set(VCPKG_HOST_IS_NETBSD ON) + set(VCPKG_HOST_IS_BSD ON) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS") + set(VCPKG_HOST_IS_SOLARIS ON) +endif() + +#Helper variable to identify the host path separator. +if(CMAKE_HOST_WIN32) + set(VCPKG_HOST_PATH_SEPARATOR ";") +elseif(CMAKE_HOST_UNIX) + set(VCPKG_HOST_PATH_SEPARATOR ":") +endif() + +#Helper variables to identify executables on host/target +if(CMAKE_HOST_WIN32) + set(VCPKG_HOST_EXECUTABLE_SUFFIX ".exe") +else() + set(VCPKG_HOST_EXECUTABLE_SUFFIX "") +endif() +#set(CMAKE_EXECUTABLE_SUFFIX ${VCPKG_HOST_EXECUTABLE_SUFFIX}) not required by find_program + +if(VCPKG_TARGET_IS_WINDOWS) + set(VCPKG_TARGET_EXECUTABLE_SUFFIX ".exe") +else() + set(VCPKG_TARGET_EXECUTABLE_SUFFIX "") +endif() + +#Helper variables to identify bundles on host/target +if(VCPKG_HOST_IS_OSX) + set(VCPKG_HOST_BUNDLE_SUFFIX ".app") +else() + set(VCPKG_HOST_BUNDLE_SUFFIX "") +endif() + +if(VCPKG_TARGET_IS_APPLE) + set(VCPKG_TARGET_BUNDLE_SUFFIX ".app") +else() + set(VCPKG_TARGET_BUNDLE_SUFFIX "") +endif() + +#Helper variables for libraries +if(VCPKG_TARGET_IS_MINGW) + set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a") + set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".dll.a") + set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dll") + set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib") + set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib") + set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "lib") + set(VCPKG_FIND_LIBRARY_SUFFIXES ".dll" ".dll.a" ".a" ".lib") + set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "") +elseif(VCPKG_TARGET_IS_WINDOWS) + set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".lib") + set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib") + set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dll") + set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX ".lib") + set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "") + set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "") + set(VCPKG_TARGET_IMPORT_LIBRARY_PREFIX "") + set(VCPKG_FIND_LIBRARY_SUFFIXES ".lib" ".dll") #This is a slight modification to CMakes value which does not include ".dll". + set(VCPKG_FIND_LIBRARY_PREFIXES "" "lib") #This is a slight modification to CMakes value which does not include "lib". +elseif(VCPKG_TARGET_IS_APPLE) + set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a") + set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "") + set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".dylib") + set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib") + set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib") + set(VCPKG_FIND_LIBRARY_SUFFIXES ".tbd" ".dylib" ".so" ".a") + set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "") +else() + set(VCPKG_TARGET_STATIC_LIBRARY_SUFFIX ".a") + set(VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX "") + set(VCPKG_TARGET_SHARED_LIBRARY_SUFFIX ".so") + set(VCPKG_TARGET_STATIC_LIBRARY_PREFIX "lib") + set(VCPKG_TARGET_SHARED_LIBRARY_PREFIX "lib") + set(VCPKG_FIND_LIBRARY_SUFFIXES ".so" ".a") + set(VCPKG_FIND_LIBRARY_PREFIXES "lib" "") +endif() +#Setting these variables allows find_library to work in script mode and thus in portfiles! +#This allows us scale down on hardcoded target dependent paths in portfiles +set(CMAKE_STATIC_LIBRARY_SUFFIX "${VCPKG_TARGET_STATIC_LIBRARY_SUFFIX}") +set(CMAKE_SHARED_LIBRARY_SUFFIX "${VCPKG_TARGET_SHARED_LIBRARY_SUFFIX}") +set(CMAKE_IMPORT_LIBRARY_SUFFIX "${VCPKG_TARGET_IMPORT_LIBRARY_SUFFIX}") +set(CMAKE_STATIC_LIBRARY_PREFIX "${VCPKG_TARGET_STATIC_LIBRARY_PREFIX}") +set(CMAKE_SHARED_LIBRARY_PREFIX "${VCPKG_TARGET_SHARED_LIBRARY_PREFIX}") +set(CMAKE_IMPORT_LIBRARY_PREFIX "${VCPKG_TARGET_IMPORT_LIBRARY_PREFIX}") + +set(CMAKE_FIND_LIBRARY_SUFFIXES "${VCPKG_FIND_LIBRARY_SUFFIXES}" CACHE INTERNAL "") # Required by find_library +set(CMAKE_FIND_LIBRARY_PREFIXES "${VCPKG_FIND_LIBRARY_PREFIXES}" CACHE INTERNAL "") # Required by find_library + +# Append platform libraries to VCPKG_SYSTEM_LIBRARIES +# The variable are just appended to permit to custom triplets define the variable + +# Platforms with libdl +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX) + list(APPEND VCPKG_SYSTEM_LIBRARIES dl) +endif() + +# Platforms with libm +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_MINGW) + list(APPEND VCPKG_SYSTEM_LIBRARIES m) +endif() + +# Platforms with pthread +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) + list(APPEND VCPKG_SYSTEM_LIBRARIES pthread) +endif() + +# Platforms with libstdc++ +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) + list(APPEND VCPKG_SYSTEM_LIBRARIES [[stdc\+\+]]) +endif() + +# Platforms with libc++ +if(VCPKG_TARGET_IS_OSX) + list(APPEND VCPKG_SYSTEM_LIBRARIES [[c\+\+]]) +endif() + +# Platforms with librt +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_MINGW) + list(APPEND VCPKG_SYSTEM_LIBRARIES rt) +endif() + +# Platforms with GCC libs +if(VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_ANDROID OR VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_FREEBSD OR VCPKG_TARGET_IS_OPENBSD OR VCPKG_TARGET_IS_MINGW) + list(APPEND VCPKG_SYSTEM_LIBRARIES gcc) + list(APPEND VCPKG_SYSTEM_LIBRARIES gcc_s) +endif() + +# Platforms with system iconv +if(VCPKG_TARGET_IS_OSX) + list(APPEND VCPKG_SYSTEM_LIBRARIES iconv) +endif() + +# Windows system libs +if(VCPKG_TARGET_IS_WINDOWS) + list(APPEND VCPKG_SYSTEM_LIBRARIES advapi32) + list(APPEND VCPKG_SYSTEM_LIBRARIES bcrypt) + list(APPEND VCPKG_SYSTEM_LIBRARIES dinput8) + list(APPEND VCPKG_SYSTEM_LIBRARIES gdi32) + list(APPEND VCPKG_SYSTEM_LIBRARIES imm32) + list(APPEND VCPKG_SYSTEM_LIBRARIES oleaut32) + list(APPEND VCPKG_SYSTEM_LIBRARIES ole32) + list(APPEND VCPKG_SYSTEM_LIBRARIES psapi) + list(APPEND VCPKG_SYSTEM_LIBRARIES secur32) + list(APPEND VCPKG_SYSTEM_LIBRARIES setupapi) + list(APPEND VCPKG_SYSTEM_LIBRARIES shell32) + list(APPEND VCPKG_SYSTEM_LIBRARIES shlwapi) + list(APPEND VCPKG_SYSTEM_LIBRARIES strmiids) + list(APPEND VCPKG_SYSTEM_LIBRARIES user32) + list(APPEND VCPKG_SYSTEM_LIBRARIES uuid) + list(APPEND VCPKG_SYSTEM_LIBRARIES version) + list(APPEND VCPKG_SYSTEM_LIBRARIES vfw32) + list(APPEND VCPKG_SYSTEM_LIBRARIES winmm) + list(APPEND VCPKG_SYSTEM_LIBRARIES wsock32) + list(APPEND VCPKG_SYSTEM_LIBRARIES Ws2_32) + list(APPEND VCPKG_SYSTEM_LIBRARIES wldap32) + list(APPEND VCPKG_SYSTEM_LIBRARIES crypt32) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_common_functions.cmake b/vcpkg/scripts/cmake/vcpkg_common_functions.cmake new file mode 100644 index 0000000..5151647 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_common_functions.cmake @@ -0,0 +1,3 @@ +# DEPRECATED
+
+message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_common_functions has been removed and all values are automatically provided in all portfile.cmake invocations. Please remove `include(vcpkg_common_functions)`.")
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake new file mode 100644 index 0000000..94b4f03 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_configure_cmake.cmake @@ -0,0 +1,372 @@ +function(z_vcpkg_configure_cmake_both_or_neither_set var1 var2) + if(DEFINED "${var1}" AND NOT DEFINED "${var2}") + message(FATAL_ERROR "If ${var1} is set, ${var2} must be set.") + endif() + if(NOT DEFINED "${var1}" AND DEFINED "${var2}") + message(FATAL_ERROR "If ${var2} is set, ${var1} must be set.") + endif() +endfunction() +function(z_vcpkg_configure_cmake_build_cmakecache out_var whereat build_type) + set(line "build ${whereat}/CMakeCache.txt: CreateProcess\n") + string(APPEND line " process = \"${CMAKE_COMMAND}\" -E chdir \"${whereat}\"") + foreach(arg IN LISTS "${build_type}_command") + string(APPEND line " \"${arg}\"") + endforeach() + set("${out_var}" "${${out_var}}${line}\n\n" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_get_visual_studio_generator) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "OUT_GENERATOR;OUT_ARCH" "") + + if (NOT DEFINED arg_OUT_GENERATOR) + message(FATAL_ERROR "OUT_GENERATOR must be defined.") + endif() + if(NOT DEFINED arg_OUT_ARCH) + message(FATAL_ERROR "OUT_ARCH must be defined.") + endif() + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(DEFINED ENV{VisualStudioVersion}) + if("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "12.99" AND + "$ENV{VisualStudioVersion}" VERSION_GREATER_EQUAL "12.0" AND + NOT "${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64") + set(generator "Visual Studio 12 2013") + elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "14.99" AND + NOT "${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64") + set(generator "Visual Studio 14 2015") + elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "15.99") + set(generator "Visual Studio 15 2017") + elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "16.99") + set(generator "Visual Studio 16 2019") + elseif("$ENV{VisualStudioVersion}" VERSION_LESS_EQUAL "17.99") + set(generator "Visual Studio 17 2022") + endif() + endif() + + if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86") + set(generator_arch "Win32") + elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64") + set(generator_arch "x64") + elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm") + set(generator_arch "ARM") + elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "arm64") + set(generator_arch "ARM64") + endif() + set(${arg_OUT_GENERATOR} "${generator}" PARENT_SCOPE) + set(${arg_OUT_ARCH} "${generator_arch}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_select_default_vcpkg_chainload_toolchain) + set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${Z_VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" PARENT_SCOPE) +endfunction() + + +function(vcpkg_configure_cmake) + cmake_parse_arguments(PARSE_ARGV 0 arg + "PREFER_NINJA;DISABLE_PARALLEL_CONFIGURE;NO_CHARSET_FLAG;Z_GET_CMAKE_VARS_USAGE" + "SOURCE_PATH;GENERATOR;LOGNAME" + "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;MAYBE_UNUSED_VARIABLES" + ) + + if(NOT arg_Z_GET_CMAKE_VARS_USAGE AND Z_VCPKG_CMAKE_CONFIGURE_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_configure_cmake in the same port is unsupported.") + endif() + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_SOURCE_PATH) + message(FATAL_ERROR "SOURCE_PATH must be specified") + endif() + if(NOT DEFINED arg_LOGNAME) + set(arg_LOGNAME "config-${TARGET_TRIPLET}") + endif() + + vcpkg_list(SET manually_specified_variables) + + if(arg_Z_GET_CMAKE_VARS_USAGE) + set(configuring_message "Getting CMake variables for ${TARGET_TRIPLET}") + else() + set(configuring_message "Configuring ${TARGET_TRIPLET}") + + foreach(option IN LISTS arg_OPTIONS arg_OPTIONS_RELEASE arg_OPTIONS_DEBUG) + if("${option}" MATCHES "^-D([^:=]*)[:=]") + vcpkg_list(APPEND manually_specified_variables "${CMAKE_MATCH_1}") + endif() + endforeach() + vcpkg_list(REMOVE_DUPLICATES manually_specified_variables) + foreach(maybe_unused_var IN LISTS arg_MAYBE_UNUSED_VARIABLES) + vcpkg_list(REMOVE_ITEM manually_specified_variables "${maybe_unused_var}") + endforeach() + debug_message("manually specified variables: ${manually_specified_variables}") + endif() + + set(ninja_can_be_used ON) # Ninja as generator + set(ninja_host ON) # Ninja as parallel configurator + + if(NOT arg_PREFER_NINJA AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + set(ninja_can_be_used OFF) + endif() + + if(VCPKG_HOST_IS_WINDOWS) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}") + else() + set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}") + endif() + + if("${host_arch}" STREQUAL "x86") + # Prebuilt ninja binaries are only provided for x64 hosts + set(ninja_can_be_used OFF) + set(ninja_host OFF) + endif() + endif() + + set(generator "Ninja") # the default generator is always ninja! + set(generator_arch "") + if(DEFINED arg_GENERATOR) + set(generator "${arg_GENERATOR}") + elseif(NOT ninja_can_be_used) + set(generator "") + z_vcpkg_get_visual_studio_generator(OUT_GENERATOR generator OUT_ARCH generator_arch) + if("${generator}" STREQUAL "" OR "${generator_arch}" STREQUAL "") + message(FATAL_ERROR + "Unable to determine appropriate generator for triplet ${TARGET_TRIPLET}: + ENV{VisualStudioVersion} : $ENV{VisualStudioVersion} + platform toolset: ${VCPKG_PLATFORM_TOOLSET} + architecture : ${VCPKG_TARGET_ARCHITECTURE}") + endif() + if(DEFINED VCPKG_PLATFORM_TOOLSET) + vcpkg_list(APPEND arg_OPTIONS "-T${VCPKG_PLATFORM_TOOLSET}") + endif() + endif() + + # If we use Ninja, make sure it's on PATH + if("${generator}" STREQUAL "Ninja" AND NOT DEFINED ENV{VCPKG_FORCE_SYSTEM_BINARIES}) + vcpkg_find_acquire_program(NINJA) + get_filename_component(ninja_path "${NINJA}" DIRECTORY) + vcpkg_add_to_path("${ninja_path}") + vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_MAKE_PROGRAM=${NINJA}") + endif() + + file(REMOVE_RECURSE + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + + if(DEFINED VCPKG_CMAKE_SYSTEM_NAME) + vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}") + if(VCPKG_TARGET_IS_UWP AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION) + set(VCPKG_CMAKE_SYSTEM_VERSION 10.0) + elseif(VCPKG_TARGET_IS_ANDROID AND NOT DEFINED VCPKG_CMAKE_SYSTEM_VERSION) + set(VCPKG_CMAKE_SYSTEM_VERSION 21) + endif() + endif() + + if(DEFINED VCPKG_XBOX_CONSOLE_TARGET) + vcpkg_list(APPEND arg_OPTIONS "-DXBOX_CONSOLE_TARGET=${VCPKG_XBOX_CONSOLE_TARGET}") + endif() + + if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION) + vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}") + endif() + + if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "dynamic") + vcpkg_list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=ON) + elseif("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static") + vcpkg_list(APPEND arg_OPTIONS -DBUILD_SHARED_LIBS=OFF) + else() + message(FATAL_ERROR + "Invalid setting for VCPKG_LIBRARY_LINKAGE: \"${VCPKG_LIBRARY_LINKAGE}\". + It must be \"static\" or \"dynamic\"") + endif() + + z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS_DEBUG VCPKG_C_FLAGS_DEBUG) + z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS_RELEASE VCPKG_C_FLAGS_RELEASE) + z_vcpkg_configure_cmake_both_or_neither_set(VCPKG_CXX_FLAGS VCPKG_C_FLAGS) + + set(vcpkg_set_charset_flag ON) + if(arg_NO_CHARSET_FLAG) + set(vcpkg_set_charset_flag OFF) + endif() + + if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + z_vcpkg_select_default_vcpkg_chainload_toolchain() + endif() + + vcpkg_list(APPEND arg_OPTIONS + "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" + "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}" + "-DVCPKG_SET_CHARSET_FLAG=${vcpkg_set_charset_flag}" + "-DVCPKG_PLATFORM_TOOLSET=${VCPKG_PLATFORM_TOOLSET}" + "-DCMAKE_EXPORT_NO_PACKAGE_REGISTRY=ON" + "-DCMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY=ON" + "-DCMAKE_FIND_PACKAGE_NO_SYSTEM_PACKAGE_REGISTRY=ON" + "-DCMAKE_INSTALL_SYSTEM_RUNTIME_LIBS_SKIP=TRUE" + "-DCMAKE_VERBOSE_MAKEFILE=ON" + "-DVCPKG_APPLOCAL_DEPS=OFF" + "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake" + "-DCMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION=ON" + "-DVCPKG_CXX_FLAGS=${VCPKG_CXX_FLAGS}" + "-DVCPKG_CXX_FLAGS_RELEASE=${VCPKG_CXX_FLAGS_RELEASE}" + "-DVCPKG_CXX_FLAGS_DEBUG=${VCPKG_CXX_FLAGS_DEBUG}" + "-DVCPKG_C_FLAGS=${VCPKG_C_FLAGS}" + "-DVCPKG_C_FLAGS_RELEASE=${VCPKG_C_FLAGS_RELEASE}" + "-DVCPKG_C_FLAGS_DEBUG=${VCPKG_C_FLAGS_DEBUG}" + "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}" + "-DVCPKG_LINKER_FLAGS=${VCPKG_LINKER_FLAGS}" + "-DVCPKG_LINKER_FLAGS_RELEASE=${VCPKG_LINKER_FLAGS_RELEASE}" + "-DVCPKG_LINKER_FLAGS_DEBUG=${VCPKG_LINKER_FLAGS_DEBUG}" + "-DVCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}" + "-DCMAKE_INSTALL_LIBDIR:STRING=lib" + "-DCMAKE_INSTALL_BINDIR:STRING=bin" + "-D_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}" + "-DZ_VCPKG_ROOT_DIR=${VCPKG_ROOT_DIR}" + "-D_VCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}" + "-DVCPKG_MANIFEST_INSTALL=OFF" + ) + + if(NOT "${generator_arch}" STREQUAL "") + vcpkg_list(APPEND arg_OPTIONS "-A${generator_arch}") + endif() + + # Sets configuration variables for macOS builds + foreach(config_var IN ITEMS INSTALL_NAME_DIR OSX_DEPLOYMENT_TARGET OSX_SYSROOT OSX_ARCHITECTURES) + if(DEFINED "VCPKG_${config_var}") + vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_${config_var}=${VCPKG_${config_var}}") + endif() + endforeach() + + # Allow overrides / additional configuration variables from triplets + if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS) + vcpkg_list(APPEND arg_OPTIONS ${VCPKG_CMAKE_CONFIGURE_OPTIONS}) + endif() + if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE ${VCPKG_CMAKE_CONFIGURE_OPTIONS_RELEASE}) + endif() + if(DEFINED VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG) + vcpkg_list(APPEND arg_OPTIONS_DEBUG ${VCPKG_CMAKE_CONFIGURE_OPTIONS_DEBUG}) + endif() + + vcpkg_list(SET rel_command + "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}" + -G "${generator}" + "-DCMAKE_BUILD_TYPE=Release" + "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}" + ${arg_OPTIONS} ${arg_OPTIONS_RELEASE}) + vcpkg_list(SET dbg_command + "${CMAKE_COMMAND}" "${arg_SOURCE_PATH}" + -G "${generator}" + "-DCMAKE_BUILD_TYPE=Debug" + "-DCMAKE_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug" + ${arg_OPTIONS} ${arg_OPTIONS_DEBUG}) + + if(ninja_host AND CMAKE_HOST_WIN32 AND NOT arg_DISABLE_PARALLEL_CONFIGURE) + vcpkg_list(APPEND arg_OPTIONS "-DCMAKE_DISABLE_SOURCE_CHANGES=ON") + + vcpkg_find_acquire_program(NINJA) + if(NOT DEFINED ninja_path) + # if ninja_path was defined above, we've already done this + get_filename_component(ninja_path "${NINJA}" DIRECTORY) + vcpkg_add_to_path("${ninja_path}") + endif() + + #parallelize the configure step + set(ninja_configure_contents + "rule CreateProcess\n command = \$process\n\n" + ) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release") + z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents ".." "rel") + endif() + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug") + z_vcpkg_configure_cmake_build_cmakecache(ninja_configure_contents "../../${TARGET_TRIPLET}-dbg" "dbg") + endif() + + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure") + file(WRITE + "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure/build.ninja" + "${ninja_configure_contents}") + + message(STATUS "${configuring_message}") + vcpkg_execute_required_process( + COMMAND "${NINJA}" -v + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/vcpkg-parallel-configure" + LOGNAME "${arg_LOGNAME}" + SAVE_LOG_FILES + "../../${TARGET_TRIPLET}-dbg/CMakeCache.txt" ALIAS "dbg-CMakeCache.txt.log" + "../CMakeCache.txt" ALIAS "rel-CMakeCache.txt.log" + ) + + vcpkg_list(APPEND config_logs + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out.log" + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-err.log") + else() + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "debug") + message(STATUS "${configuring_message}-dbg") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + vcpkg_execute_required_process( + COMMAND ${dbg_command} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" + LOGNAME "${arg_LOGNAME}-dbg" + SAVE_LOG_FILES CMakeCache.txt + ) + vcpkg_list(APPEND config_logs + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-dbg-out.log" + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-dbg-err.log") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR "${VCPKG_BUILD_TYPE}" STREQUAL "release") + message(STATUS "${configuring_message}-rel") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + vcpkg_execute_required_process( + COMMAND ${rel_command} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" + LOGNAME "${arg_LOGNAME}-rel" + SAVE_LOG_FILES CMakeCache.txt + ) + vcpkg_list(APPEND config_logs + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-rel-out.log" + "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-rel-err.log") + endif() + endif() + + # Check unused variables + vcpkg_list(SET all_unused_variables) + foreach(config_log IN LISTS config_logs) + if(NOT EXISTS "${config_log}") + continue() + endif() + file(READ "${config_log}" log_contents) + debug_message("Reading configure log ${config_log}...") + if(NOT "${log_contents}" MATCHES "Manually-specified variables were not used by the project:\n\n(( [^\n]*\n)*)") + continue() + endif() + string(STRIP "${CMAKE_MATCH_1}" unused_variables) # remove leading ` ` and trailing `\n` + string(REPLACE "\n " ";" unused_variables "${unused_variables}") + debug_message("unused variables: ${unused_variables}") + + foreach(unused_variable IN LISTS unused_variables) + if("${unused_variable}" IN_LIST manually_specified_variables) + debug_message("manually specified unused variable: ${unused_variable}") + vcpkg_list(APPEND all_unused_variables "${unused_variable}") + else() + debug_message("unused variable (not manually specified): ${unused_variable}") + endif() + endforeach() + endforeach() + + if(NOT "${all_unused_variables}" STREQUAL "") + vcpkg_list(REMOVE_DUPLICATES all_unused_variables) + vcpkg_list(JOIN all_unused_variables "\n " all_unused_variables) + message(WARNING "The following variables are not used in CMakeLists.txt: + ${all_unused_variables} +Please recheck them and remove the unnecessary options from the `vcpkg_configure_cmake` call. +If these options should still be passed for whatever reason, please use the `MAYBE_UNUSED_VARIABLES` argument.") + endif() + + if(NOT arg_Z_GET_CMAKE_VARS_USAGE) + set(Z_VCPKG_CMAKE_GENERATOR "${generator}" PARENT_SCOPE) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake b/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake new file mode 100644 index 0000000..9fbcd4c --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_configure_gn.cmake @@ -0,0 +1,52 @@ +function(z_vcpkg_configure_gn_generate) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;CONFIG;ARGS" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Internal error: generate was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + message(STATUS "Generating build (${arg_CONFIG})...") + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${arg_CONFIG}") + vcpkg_execute_required_process( + COMMAND "${GN}" gen "${CURRENT_BUILDTREES_DIR}/${arg_CONFIG}" "${arg_ARGS}" + WORKING_DIRECTORY "${arg_SOURCE_PATH}" + LOGNAME "generate-${arg_CONFIG}" + ) +endfunction() + +function(vcpkg_configure_gn) + if(Z_VCPKG_GN_CONFIGURE_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-gn; using both vcpkg-gn and vcpkg_configure_gn in the same port is unsupported.") + else() + message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "This function 'vcpkg_configure_gn' is obsolete. Use 'vcpkg_gn_configure' in port 'vcpkg-gn'.") + endif() + + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_configure_gn was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_SOURCE_PATH) + message(FATAL_ERROR "SOURCE_PATH must be specified.") + endif() + + vcpkg_find_acquire_program(PYTHON3) + get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY) + vcpkg_add_to_path(PREPEND "${PYTHON3_DIR}") + + vcpkg_find_acquire_program(GN) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + z_vcpkg_configure_gn_generate( + SOURCE_PATH "${arg_SOURCE_PATH}" + CONFIG "${TARGET_TRIPLET}-dbg" + ARGS "--args=${arg_OPTIONS} ${arg_OPTIONS_DEBUG}" + ) + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + z_vcpkg_configure_gn_generate( + SOURCE_PATH "${arg_SOURCE_PATH}" + CONFIG "${TARGET_TRIPLET}-rel" + ARGS "--args=${arg_OPTIONS} ${arg_OPTIONS_RELEASE}" + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_configure_make.cmake b/vcpkg/scripts/cmake/vcpkg_configure_make.cmake new file mode 100644 index 0000000..a54abf9 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_configure_make.cmake @@ -0,0 +1,917 @@ +macro(z_vcpkg_determine_autotools_host_cpu out_var)
+ # TODO: the host system processor architecture can differ from the host triplet target architecture
+ if(DEFINED ENV{PROCESSOR_ARCHITEW6432})
+ set(host_arch $ENV{PROCESSOR_ARCHITEW6432})
+ elseif(DEFINED ENV{PROCESSOR_ARCHITECTURE})
+ set(host_arch $ENV{PROCESSOR_ARCHITECTURE})
+ else()
+ set(host_arch "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+ endif()
+ if(host_arch MATCHES "(amd|AMD)64")
+ set(${out_var} x86_64)
+ elseif(host_arch MATCHES "(x|X)86")
+ set(${out_var} i686)
+ elseif(host_arch MATCHES "^(ARM|arm)64$")
+ set(${out_var} aarch64)
+ elseif(host_arch MATCHES "^(ARM|arm)$")
+ set(${out_var} arm)
+ else()
+ message(FATAL_ERROR "Unsupported host architecture ${host_arch} in z_vcpkg_determine_autotools_host_cpu!" )
+ endif()
+ unset(host_arch)
+endmacro()
+
+macro(z_vcpkg_determine_autotools_target_cpu out_var)
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)64")
+ set(${out_var} x86_64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86")
+ set(${out_var} i686)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$")
+ set(${out_var} aarch64)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$")
+ set(${out_var} arm)
+ else()
+ message(FATAL_ERROR "Unsupported VCPKG_TARGET_ARCHITECTURE architecture ${VCPKG_TARGET_ARCHITECTURE} in z_vcpkg_determine_autotools_target_cpu!" )
+ endif()
+endmacro()
+
+macro(z_vcpkg_set_arch_mac out_var value)
+ # Better match the arch behavior of config.guess
+ # See: https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+ if("${value}" MATCHES "^(ARM|arm)64$")
+ set(${out_var} "aarch64")
+ else()
+ set(${out_var} "${value}")
+ endif()
+endmacro()
+
+macro(z_vcpkg_determine_autotools_host_arch_mac out_var)
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+endmacro()
+
+macro(z_vcpkg_determine_autotools_target_arch_mac out_var)
+ list(LENGTH VCPKG_OSX_ARCHITECTURES osx_archs_num)
+ if(osx_archs_num EQUAL 0)
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_DETECTED_CMAKE_HOST_SYSTEM_PROCESSOR}")
+ elseif(osx_archs_num GREATER_EQUAL 2)
+ set(${out_var} "universal")
+ else()
+ z_vcpkg_set_arch_mac(${out_var} "${VCPKG_OSX_ARCHITECTURES}")
+ endif()
+ unset(osx_archs_num)
+endmacro()
+
+# Define variables used in both vcpkg_configure_make and vcpkg_build_make:
+# short_name_<CONFIG>: unique abbreviation for the given build type (rel, dbg)
+# path_suffix_<CONFIG>: installation path suffix for the given build type ('', /debug)
+# current_installed_dir_escaped: CURRENT_INSTALLED_DIR with escaped space characters
+# current_installed_dir_msys: CURRENT_INSTALLED_DIR with unprotected spaces, but drive letters transformed for msys
+macro(z_vcpkg_configure_make_common_definitions)
+ set(short_name_RELEASE "rel")
+ set(short_name_DEBUG "dbg")
+
+ set(path_suffix_RELEASE "")
+ set(path_suffix_DEBUG "/debug")
+
+ # Some PATH handling for dealing with spaces....some tools will still fail with that!
+ # In particular, the libtool install command is unable to install correctly to paths with spaces.
+ string(REPLACE " " "\\ " current_installed_dir_escaped "${CURRENT_INSTALLED_DIR}")
+ set(current_installed_dir_msys "${CURRENT_INSTALLED_DIR}")
+ if(CMAKE_HOST_WIN32)
+ string(REGEX REPLACE "^([a-zA-Z]):/" "/\\1/" current_installed_dir_msys "${current_installed_dir_msys}")
+ endif()
+endmacro()
+
+# Initializes well-known and auxiliary variables for flags
+# - CPPFLAGS_<CONFIG>: preprocessor flags common to C and CXX
+# - CFLAGS_<CONFIG>
+# - CXXFLAGS_<CONFIG>
+# - LDFLAGS_<CONFIG>
+# - ARFLAGS_<CONFIG>
+# - LINK_ENV_${var_suffix}
+# Prerequisite: VCPKG_DETECTED_CMAKE_... vars loaded
+function(z_vcpkg_configure_make_process_flags var_suffix)
+ # separate_arguments is needed to remove outer quotes from detected cmake variables.
+ # (e.g. Android NDK has "--sysroot=...")
+ separate_arguments(CFLAGS NATIVE_COMMAND "Z_VCM_WRAP ${VCPKG_DETECTED_CMAKE_C_FLAGS_${var_suffix}} Z_VCM_WRAP")
+ separate_arguments(CXXFLAGS NATIVE_COMMAND "Z_VCM_WRAP ${VCPKG_DETECTED_CMAKE_CXX_FLAGS_${var_suffix}} Z_VCM_WRAP")
+ separate_arguments(LDFLAGS NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${var_suffix}}")
+ separate_arguments(ARFLAGS NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${var_suffix}}")
+ foreach(var IN ITEMS CFLAGS CXXFLAGS LDFLAGS ARFLAGS)
+ vcpkg_list(APPEND z_vcm_all_flags ${${var}})
+ endforeach()
+ set(z_vcm_all_flags "${z_vcm_all_flags}" PARENT_SCOPE)
+
+ # Filter common CPPFLAGS out of CFLAGS and CXXFLAGS
+ vcpkg_list(SET CPPFLAGS)
+ vcpkg_list(SET pattern)
+ foreach(arg IN LISTS CXXFLAGS)
+ if(arg STREQUAL "Z_VCM_WRAP")
+ continue()
+ elseif(NOT pattern STREQUAL "")
+ vcpkg_list(APPEND pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem).")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ elseif(arg MATCHES "^-(-sysroot|-target|m?[Aa][Rr][Cc][Hh])=.")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(isysroot|m32|m64|m?[Aa][Rr][Cc][Hh]|target)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ else()
+ continue()
+ endif()
+ string(FIND "${CFLAGS}" ";${pattern};" index)
+ if(NOT index STREQUAL "-1")
+ vcpkg_list(APPEND CPPFLAGS ${pattern})
+ string(REPLACE ";${pattern};" ";" CFLAGS "${CFLAGS}")
+ string(REPLACE ";${pattern};" ";" CXXFLAGS "${CXXFLAGS}")
+ endif()
+ vcpkg_list(SET pattern)
+ endforeach()
+ vcpkg_list(SET pattern)
+ foreach(arg IN LISTS CFLAGS)
+ if(arg STREQUAL "Z_VCM_WRAP")
+ continue()
+ elseif(NOT pattern STREQUAL "")
+ vcpkg_list(APPEND pattern "${arg}")
+ elseif(arg MATCHES "^-(D|isystem)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ elseif(arg MATCHES "^-(D|isystem).")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(-sysroot|-target|m?[Aa][Rr][Cc][Hh])=.")
+ vcpkg_list(SET pattern "${arg}")
+ elseif(arg MATCHES "^-(isysroot|m32|m64|m?[Aa][Rr][Cc][Hh]|target)\$")
+ vcpkg_list(SET pattern "${arg}")
+ continue()
+ else()
+ continue()
+ endif()
+ string(FIND "${CXXFLAGS}" ";${pattern};" index)
+ if(NOT index STREQUAL "-1")
+ vcpkg_list(APPEND CPPFLAGS ${pattern})
+ string(REPLACE ";${pattern};" ";" CFLAGS "${CFLAGS}")
+ string(REPLACE ";${pattern};" ";" CXXFLAGS "${CXXFLAGS}")
+ endif()
+ vcpkg_list(SET pattern)
+ endforeach()
+
+ # Remove start/end placeholders
+ foreach(list IN ITEMS CFLAGS CXXFLAGS)
+ vcpkg_list(REMOVE_ITEM ${list} "Z_VCM_WRAP")
+ endforeach()
+
+ # libtool tries to filter CFLAGS passed to the link stage via an allow-list.
+ # This approach is flawed since it fails to pass flags unknown to libtool
+ # but required for linking to the link stage (e.g. -fsanitize=<x>).
+ # libtool has an -R option so we need to guard against -RTC by using -Xcompiler.
+ # While configuring there might be a lot of unknown compiler option warnings
+ # due to that; just ignore them.
+ set(compiler_flag_escape "")
+ if(VCPKG_DETECTED_CMAKE_C_COMPILER_FRONTEND_VARIANT STREQUAL "MSVC" OR VCPKG_DETECTED_CMAKE_C_COMPILER_ID STREQUAL "MSVC")
+ set(compiler_flag_escape "-Xcompiler ")
+ endif()
+ if(compiler_flag_escape)
+ list(TRANSFORM CFLAGS PREPEND "${compiler_flag_escape}")
+ list(TRANSFORM CXXFLAGS PREPEND "${compiler_flag_escape}")
+ endif()
+
+ # Could use a future VCPKG_DETECTED_CMAKE_LIBRARY_PATH_FLAG
+ set(library_path_flag "-L")
+ # Could use a future VCPKG_DETECTED_MSVC
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_DETECTED_CMAKE_LINKER MATCHES [[link\.exe$]])
+ set(library_path_flag "-LIBPATH:")
+ endif()
+ set(linker_flag_escape "")
+ if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES [[cl\.exe$]])
+ # Removed by libtool
+ set(linker_flag_escape "-Xlinker ")
+ if(arg_USE_WRAPPERS)
+ # 1st and 3rd are removed by libtool, 2nd by wrapper
+ set(linker_flag_escape "-Xlinker -Xlinker -Xlinker ")
+ endif()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ string(STRIP "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${var_suffix}}" LINK_ENV)
+ else()
+ string(STRIP "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${var_suffix}}" LINK_ENV)
+ endif()
+ endif()
+ if(linker_flag_escape)
+ list(TRANSFORM LDFLAGS PREPEND "${linker_flag_escape}")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib/manual-link")
+ vcpkg_list(PREPEND LDFLAGS "${linker_flag_escape}${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib/manual-link")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${var_suffix}}/lib")
+ vcpkg_list(PREPEND LDFLAGS "${linker_flag_escape}${library_path_flag}${current_installed_dir_escaped}${path_suffix_${var_suffix}}/lib")
+ endif()
+
+ if(ARFLAGS)
+ # ARFLAGS need to know the command for creating an archive (Maybe needs user customization?)
+ # or extract it from CMake via CMAKE_${lang}_ARCHIVE_CREATE ?
+ # or from CMAKE_${lang}_${rule} with rule being one of CREATE_SHARED_MODULE CREATE_SHARED_LIBRARY LINK_EXECUTABLE
+ vcpkg_list(PREPEND ARFLAGS "cr")
+ endif()
+
+ foreach(var IN ITEMS CPPFLAGS CFLAGS CXXFLAGS LDFLAGS ARFLAGS)
+ list(JOIN ${var} " " string)
+ set(${var}_${var_suffix} "${string}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+macro(z_vcpkg_append_to_configure_environment inoutstring var defaultval)
+ # Allows to overwrite settings in custom triplets via the environment on windows
+ if(CMAKE_HOST_WIN32 AND DEFINED ENV{${var}})
+ string(APPEND ${inoutstring} " ${var}='$ENV{${var}}'")
+ else()
+ string(APPEND ${inoutstring} " ${var}='${defaultval}'")
+ endif()
+endmacro()
+
+function(vcpkg_configure_make)
+ # parse parameters such that semicolons in options arguments to COMMAND don't get erased
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "AUTOCONFIG;SKIP_CONFIGURE;COPY_SOURCE;DISABLE_VERBOSE_FLAGS;NO_ADDITIONAL_PATHS;ADD_BIN_TO_PATH;NO_DEBUG;USE_WRAPPERS;NO_WRAPPERS;DETERMINE_BUILD_TRIPLET"
+ "SOURCE_PATH;PROJECT_SUBPATH;PRERUN_SHELL;BUILD_TRIPLET"
+ "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;CONFIGURE_ENVIRONMENT_VARIABLES;CONFIG_DEPENDENT_ENVIRONMENT;ADDITIONAL_MSYS_PACKAGES"
+ )
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(arg_USE_WRAPPERS AND arg_NO_WRAPPERS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed conflicting options USE_WRAPPERS and NO_WRAPPERS. Please remove one of them!")
+ endif()
+
+ z_vcpkg_get_cmake_vars(cmake_vars_file)
+ debug_message("Including cmake vars from: ${cmake_vars_file}")
+ include("${cmake_vars_file}")
+
+ if(DEFINED VCPKG_MAKE_BUILD_TRIPLET)
+ set(arg_BUILD_TRIPLET ${VCPKG_MAKE_BUILD_TRIPLET}) # Triplet overwrite for crosscompiling
+ endif()
+
+ set(src_dir "${arg_SOURCE_PATH}/${arg_PROJECT_SUBPATH}")
+
+ set(requires_autogen OFF) # use autogen.sh
+ set(requires_autoconfig OFF) # use autotools and configure.ac
+ if(EXISTS "${src_dir}/configure" AND EXISTS "${src_dir}/configure.ac" AND arg_AUTOCONFIG) # remove configure; rerun autoconf
+ set(requires_autoconfig ON)
+ file(REMOVE "${SRC_DIR}/configure") # remove possible outdated configure scripts
+ elseif(arg_SKIP_CONFIGURE)
+ # no action requested
+ elseif(EXISTS "${src_dir}/configure")
+ # run normally; no autoconf or autogen required
+ elseif(EXISTS "${src_dir}/configure.ac") # Run autoconfig
+ set(requires_autoconfig ON)
+ set(arg_AUTOCONFIG ON)
+ elseif(EXISTS "${src_dir}/autogen.sh") # Run autogen
+ set(requires_autogen ON)
+ else()
+ message(FATAL_ERROR "Could not determine method to configure make")
+ endif()
+
+ debug_message("requires_autogen:${requires_autogen}")
+ debug_message("requires_autoconfig:${requires_autoconfig}")
+
+ if(CMAKE_HOST_WIN32 AND VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "cl.exe") #only applies to windows (clang-)cl and lib
+ if(arg_AUTOCONFIG)
+ set(arg_USE_WRAPPERS ON)
+ else()
+ # Keep the setting from portfiles.
+ # Without autotools we assume a custom configure script which correctly handles cl and lib.
+ # Otherwise the port needs to set CC|CXX|AR and probably CPP.
+ endif()
+ else()
+ set(arg_USE_WRAPPERS OFF)
+ endif()
+ if(arg_NO_WRAPPERS)
+ set(arg_USE_WRAPPERS OFF)
+ endif()
+
+ # Backup environment variables
+ # CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJCXX R UPC Y
+ set(cm_FLAGS AR AS CCAS CC C CPP CXX FC FF GC LD LF LIBTOOL OBJC OBJXX R UPC Y RC)
+ list(TRANSFORM cm_FLAGS APPEND "FLAGS")
+ vcpkg_backup_env_variables(VARS ${cm_FLAGS})
+
+
+ # FC fotran compiler | FF Fortran 77 compiler
+ # LDFLAGS -> pass -L flags
+ # LIBS -> pass -l flags
+
+ # Used by gcc/linux
+ vcpkg_backup_env_variables(VARS C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ # Used by cl
+ vcpkg_backup_env_variables(VARS INCLUDE LIB LIBPATH)
+
+ vcpkg_list(SET z_vcm_paths_with_spaces)
+ if(CURRENT_PACKAGES_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_PACKAGES_DIR}")
+ endif()
+ if(CURRENT_INSTALLED_DIR MATCHES " ")
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "${CURRENT_INSTALLED_DIR}")
+ endif()
+ if(z_vcm_paths_with_spaces)
+ # Don't bother with whitespace. The tools will probably fail and I tried very hard trying to make it work (no success so far)!
+ vcpkg_list(APPEND z_vcm_paths_with_spaces "Please move the path to one without whitespaces!")
+ list(JOIN z_vcm_paths_with_spaces "\n " z_vcm_paths_with_spaces)
+ message(STATUS "Warning: Paths with embedded space may be handled incorrectly by configure:\n ${z_vcm_paths_with_spaces}")
+ endif()
+
+ set(configure_env "V=1")
+
+ # Establish a bash environment as expected by autotools.
+ if(CMAKE_HOST_WIN32)
+ list(APPEND msys_require_packages autoconf-wrapper automake-wrapper binutils libtool make pkgconf which)
+ vcpkg_acquire_msys(MSYS_ROOT PACKAGES ${msys_require_packages} ${arg_ADDITIONAL_MSYS_PACKAGES})
+ set(base_cmd "${MSYS_ROOT}/usr/bin/bash.exe" --noprofile --norc --debug)
+ vcpkg_list(SET add_to_env)
+ if(arg_USE_WRAPPERS AND VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_list(APPEND add_to_env "${SCRIPTS}/buildsystems/make_wrapper") # Other required wrappers are also located there
+ vcpkg_list(APPEND add_to_env "${MSYS_ROOT}/usr/share/automake-1.16")
+ endif()
+ cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST path_list NORMALIZE)
+ cmake_path(CONVERT "$ENV{SystemRoot}" TO_CMAKE_PATH_LIST system_root NORMALIZE)
+ cmake_path(CONVERT "$ENV{LOCALAPPDATA}" TO_CMAKE_PATH_LIST local_app_data NORMALIZE)
+ file(REAL_PATH "${system_root}" system_root)
+
+ message(DEBUG "path_list:${path_list}") # Just to have --trace-expand output
+
+ vcpkg_list(SET find_system_dirs
+ "${system_root}/System32"
+ "${system_root}/System32/"
+ "${local_app_data}/Microsoft/WindowsApps"
+ "${local_app_data}/Microsoft/WindowsApps/"
+ )
+
+ string(TOUPPER "${find_system_dirs}" find_system_dirs_upper)
+
+ set(index 0)
+ set(appending TRUE)
+ foreach(item IN LISTS path_list)
+ string(TOUPPER "${item}" item_upper)
+ if(item_upper IN_LIST find_system_dirs_upper)
+ set(appending FALSE)
+ break()
+ endif()
+ math(EXPR index "${index} + 1")
+ endforeach()
+
+ if(appending)
+ message(WARNING "Unable to find system dir in the PATH variable! Appending required msys paths!")
+ endif()
+ vcpkg_list(INSERT path_list "${index}" ${add_to_env} "${MSYS_ROOT}/usr/bin")
+
+ cmake_path(CONVERT "${path_list}" TO_NATIVE_PATH_LIST native_path_list)
+ set(ENV{PATH} "${native_path_list}")
+ else()
+ find_program(base_cmd bash REQUIRED)
+ endif()
+
+ # Apple platforms - cross-compiling support
+ if(VCPKG_TARGET_IS_APPLE)
+ if (requires_autoconfig AND NOT arg_BUILD_TRIPLET OR arg_DETERMINE_BUILD_TRIPLET)
+ z_vcpkg_determine_autotools_host_arch_mac(BUILD_ARCH) # machine you are building on => --build=
+ z_vcpkg_determine_autotools_target_arch_mac(TARGET_ARCH)
+ # --build: the machine you are building on
+ # --host: the machine you are building for
+ # --target: the machine that CC will produce binaries for
+ # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler
+ # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host
+ if(NOT "${TARGET_ARCH}" STREQUAL "${BUILD_ARCH}" OR NOT VCPKG_TARGET_IS_OSX) # we don't need to specify the additional flags if we build natively.
+ set(arg_BUILD_TRIPLET "--host=${TARGET_ARCH}-apple-darwin") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+ endif()
+
+ # Linux - cross-compiling support
+ if(VCPKG_TARGET_IS_LINUX)
+ if (requires_autoconfig AND NOT arg_BUILD_TRIPLET OR arg_DETERMINE_BUILD_TRIPLET)
+ # The regex below takes the prefix from the resulting CMAKE_C_COMPILER variable eg. arm-linux-gnueabihf-gcc
+ # set in the common toolchains/linux.cmake
+ # This is used via --host as a prefix for all other bin tools as well.
+ # Setting the compiler directly via CC=arm-linux-gnueabihf-gcc does not work acording to:
+ # https://www.gnu.org/software/autoconf/manual/autoconf-2.65/html_node/Specifying-Target-Triplets.html
+ if(VCPKG_DETECTED_CMAKE_C_COMPILER MATCHES "([^\/]*)-gcc$" AND CMAKE_MATCH_1)
+ set(arg_BUILD_TRIPLET "--host=${CMAKE_MATCH_1}") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+ endif()
+
+ # Pre-processing windows configure requirements
+ if (VCPKG_TARGET_IS_WINDOWS)
+ if (arg_DETERMINE_BUILD_TRIPLET OR NOT arg_BUILD_TRIPLET)
+ z_vcpkg_determine_autotools_host_cpu(BUILD_ARCH) # VCPKG_HOST => machine you are building on => --build=
+ z_vcpkg_determine_autotools_target_cpu(TARGET_ARCH)
+ # --build: the machine you are building on
+ # --host: the machine you are building for
+ # --target: the machine that CC will produce binaries for
+ # https://stackoverflow.com/questions/21990021/how-to-determine-host-value-for-configure-when-using-cross-compiler
+ # Only for ports using autotools so we can assume that they follow the common conventions for build/target/host
+ if(CMAKE_HOST_WIN32)
+ # Respect host triplet when determining --build
+ if(NOT VCPKG_CROSSCOMPILING)
+ set(_win32_build_arch "${TARGET_ARCH}")
+ else()
+ set(_win32_build_arch "${BUILD_ARCH}")
+ endif()
+
+ # This is required since we are running in a msys
+ # shell which will be otherwise identified as ${BUILD_ARCH}-pc-msys
+ set(arg_BUILD_TRIPLET "--build=${_win32_build_arch}-pc-mingw32")
+ endif()
+ if(NOT TARGET_ARCH MATCHES "${BUILD_ARCH}" OR NOT CMAKE_HOST_WIN32) # we don't need to specify the additional flags if we build nativly, this does not hold when we are not on windows
+ string(APPEND arg_BUILD_TRIPLET " --host=${TARGET_ARCH}-pc-mingw32") # (Host activates crosscompilation; The name given here is just the prefix of the host tools for the target)
+ endif()
+ if(VCPKG_TARGET_IS_UWP AND NOT arg_BUILD_TRIPLET MATCHES "--host")
+ # Needs to be different from --build to enable cross builds.
+ string(APPEND arg_BUILD_TRIPLET " --host=${TARGET_ARCH}-unknown-mingw32")
+ endif()
+ debug_message("Using make triplet: ${arg_BUILD_TRIPLET}")
+ endif()
+
+ # Remove full filepaths due to spaces and prepend filepaths to PATH (cross-compiling tools are unlikely on path by default)
+ set(progs VCPKG_DETECTED_CMAKE_C_COMPILER VCPKG_DETECTED_CMAKE_CXX_COMPILER VCPKG_DETECTED_CMAKE_AR
+ VCPKG_DETECTED_CMAKE_LINKER VCPKG_DETECTED_CMAKE_RANLIB VCPKG_DETECTED_CMAKE_OBJDUMP
+ VCPKG_DETECTED_CMAKE_STRIP VCPKG_DETECTED_CMAKE_NM VCPKG_DETECTED_CMAKE_DLLTOOL VCPKG_DETECTED_CMAKE_RC_COMPILER)
+ foreach(prog IN LISTS progs)
+ set(filepath "${${prog}}")
+ if(filepath MATCHES " ")
+ cmake_path(GET filepath FILENAME ${prog})
+ find_program(z_vcm_prog_found NAMES "${${prog}}" PATHS ENV PATH NO_DEFAULT_PATH NO_CACHE)
+ if(NOT z_vcm_prog_found STREQUAL filepath)
+ cmake_path(GET filepath PARENT_PATH dir)
+ vcpkg_add_to_path(PREPEND "${dir}")
+ endif()
+ endif()
+ endforeach()
+ if (arg_USE_WRAPPERS)
+ z_vcpkg_append_to_configure_environment(configure_env CPP "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+
+ z_vcpkg_append_to_configure_environment(configure_env CC "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ else()
+ # Silly trick to make configure accept CC_FOR_BUILD but in reallity CC_FOR_BUILD is deactivated.
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CXX "compile ${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env RC "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env WINDRES "windres-rc ${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ if(VCPKG_DETECTED_CMAKE_AR)
+ z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib ${VCPKG_DETECTED_CMAKE_AR}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env AR "ar-lib lib.exe -verbose")
+ endif()
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env CPP "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CC "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "${VCPKG_DETECTED_CMAKE_C_COMPILER} -E")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env CC_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CPP_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ z_vcpkg_append_to_configure_environment(configure_env CXX_FOR_BUILD "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CXX "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env RC "${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ z_vcpkg_append_to_configure_environment(configure_env WINDRES "${VCPKG_DETECTED_CMAKE_RC_COMPILER}")
+ if(VCPKG_DETECTED_CMAKE_AR)
+ z_vcpkg_append_to_configure_environment(configure_env AR "${VCPKG_DETECTED_CMAKE_AR}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env AR "lib.exe -verbose")
+ endif()
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env LD "${VCPKG_DETECTED_CMAKE_LINKER} -verbose")
+ if(VCPKG_DETECTED_CMAKE_RANLIB)
+ z_vcpkg_append_to_configure_environment(configure_env RANLIB "${VCPKG_DETECTED_CMAKE_RANLIB}") # Trick to ignore the RANLIB call
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env RANLIB ":")
+ endif()
+ if(VCPKG_DETECTED_CMAKE_OBJDUMP) #Objdump is required to make shared libraries. Otherwise define lt_cv_deplibs_check_method=pass_all
+ z_vcpkg_append_to_configure_environment(configure_env OBJDUMP "${VCPKG_DETECTED_CMAKE_OBJDUMP}") # Trick to ignore the RANLIB call
+ endif()
+ if(VCPKG_DETECTED_CMAKE_STRIP) # If required set the ENV variable STRIP in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env STRIP "${VCPKG_DETECTED_CMAKE_STRIP}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env STRIP ":")
+ list(APPEND arg_OPTIONS ac_cv_prog_ac_ct_STRIP=:)
+ endif()
+ if(VCPKG_DETECTED_CMAKE_NM) # If required set the ENV variable NM in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env NM "${VCPKG_DETECTED_CMAKE_NM}")
+ else()
+ # Would be better to have a true nm here! Some symbols (mainly exported variables) get not properly imported with dumpbin as nm
+ # and require __declspec(dllimport) for some reason (same problem CMake has with WINDOWS_EXPORT_ALL_SYMBOLS)
+ z_vcpkg_append_to_configure_environment(configure_env NM "dumpbin.exe -symbols -headers")
+ endif()
+ if(VCPKG_DETECTED_CMAKE_DLLTOOL) # If required set the ENV variable DLLTOOL in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "${VCPKG_DETECTED_CMAKE_DLLTOOL}")
+ else()
+ z_vcpkg_append_to_configure_environment(configure_env DLLTOOL "link.exe -verbose -dll")
+ endif()
+ z_vcpkg_append_to_configure_environment(configure_env CCAS ":") # If required set the ENV variable CCAS in the portfile correctly
+ z_vcpkg_append_to_configure_environment(configure_env AS ":") # If required set the ENV variable AS in the portfile correctly
+
+ foreach(_env IN LISTS arg_CONFIGURE_ENVIRONMENT_VARIABLES)
+ z_vcpkg_append_to_configure_environment(configure_env ${_env} "${${_env}}")
+ endforeach()
+ debug_message("configure_env: '${configure_env}'")
+ # Other maybe interesting variables to control
+ # COMPILE This is the command used to actually compile a C source file. The file name is appended to form the complete command line.
+ # LINK This is the command used to actually link a C program.
+ # CXXCOMPILE The command used to actually compile a C++ source file. The file name is appended to form the complete command line.
+ # CXXLINK The command used to actually link a C++ program.
+
+ # Variables not correctly detected by configure. In release builds.
+ list(APPEND arg_OPTIONS gl_cv_double_slash_root=yes
+ ac_cv_func_memmove=yes)
+ #list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all) # Just ignore libtool checks
+ if(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]64$")
+ list(APPEND arg_OPTIONS gl_cv_host_cpu_c_abi=no)
+ # Currently needed for arm64 because objdump yields: "unrecognised machine type (0xaa64) in Import Library Format archive"
+ list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all)
+ elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^[Aa][Rr][Mm]$")
+ # Currently needed for arm because objdump yields: "unrecognised machine type (0x1c4) in Import Library Format archive"
+ list(APPEND arg_OPTIONS lt_cv_deplibs_check_method=pass_all)
+ endif()
+ else()
+ # OSX dosn't like CMAKE_C(XX)_COMPILER (cc) in CC/CXX and rather wants to have gcc/g++
+ vcpkg_list(SET z_vcm_all_tools)
+ function(z_vcpkg_make_set_env envvar cmakevar)
+ if(NOT VCPKG_DETECTED_CMAKE_${cmakevar})
+ return()
+ endif()
+ set(prog "${VCPKG_DETECTED_CMAKE_${cmakevar}}")
+ if(NOT DEFINED ENV{${envvar}} AND NOT prog STREQUAL "")
+ vcpkg_list(APPEND z_vcm_all_tools "${prog}")
+ if(ARGN)
+ string(APPEND prog " ${ARGN}")
+ endif()
+ set(z_vcm_all_tools "${z_vcm_all_tools}" PARENT_SCOPE)
+ set(ENV{${envvar}} "${prog}")
+ endif()
+ endfunction()
+ z_vcpkg_make_set_env(CC C_COMPILER)
+ if(NOT arg_BUILD_TRIPLET MATCHES "--host")
+ z_vcpkg_make_set_env(CC_FOR_BUILD C_COMPILER)
+ z_vcpkg_make_set_env(CPP_FOR_BUILD C_COMPILER "-E")
+ z_vcpkg_make_set_env(CXX_FOR_BUILD C_COMPILER)
+ else()
+ set(ENV{CC_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ set(ENV{CPP_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ set(ENV{CXX_FOR_BUILD} "touch a.out | touch conftest${VCPKG_HOST_EXECUTABLE_SUFFIX} | true")
+ endif()
+ z_vcpkg_make_set_env(CXX CXX_COMPILER)
+ z_vcpkg_make_set_env(NM NM)
+ z_vcpkg_make_set_env(RC RC)
+ z_vcpkg_make_set_env(WINDRES RC)
+ z_vcpkg_make_set_env(DLLTOOL DLLTOOL)
+ z_vcpkg_make_set_env(STRIP STRIP)
+ z_vcpkg_make_set_env(OBJDUMP OBJDUMP)
+ z_vcpkg_make_set_env(RANLIB RANLIB)
+ z_vcpkg_make_set_env(AR AR)
+ z_vcpkg_make_set_env(LD LINKER)
+ unset(z_vcpkg_make_set_env)
+ endif()
+
+ list(FILTER z_vcm_all_tools INCLUDE REGEX " ")
+ if(z_vcm_all_tools)
+ list(REMOVE_DUPLICATES z_vcm_all_tools)
+ list(JOIN z_vcm_all_tools "\n " tools)
+ message(STATUS "Warning: Tools with embedded space may be handled incorrectly by configure:\n ${tools}")
+ endif()
+
+ z_vcpkg_configure_make_common_definitions()
+
+ # Cleanup previous build dirs
+ file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_RELEASE}"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_DEBUG}"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+
+ # Set configure paths
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE "--prefix=${current_installed_dir_msys}")
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG "--prefix=${current_installed_dir_msys}${path_suffix_DEBUG}")
+ if(NOT arg_NO_ADDITIONAL_PATHS)
+ # ${prefix} has an extra backslash to prevent early expansion when calling `bash -c configure "..."`.
+ vcpkg_list(APPEND arg_OPTIONS_RELEASE
+ # Important: These should all be relative to prefix!
+ "--bindir=\\\${prefix}/tools/${PORT}/bin"
+ "--sbindir=\\\${prefix}/tools/${PORT}/sbin"
+ "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default
+ #"--includedir='\${prefix}'/include" # already the default!
+ "--mandir=\\\${prefix}/share/${PORT}"
+ "--docdir=\\\${prefix}/share/${PORT}"
+ "--datarootdir=\\\${prefix}/share/${PORT}")
+ vcpkg_list(APPEND arg_OPTIONS_DEBUG
+ # Important: These should all be relative to prefix!
+ "--bindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/bin"
+ "--sbindir=\\\${prefix}/../tools/${PORT}${path_suffix_DEBUG}/sbin"
+ "--libdir=\\\${prefix}/lib" # On some Linux distributions lib64 is the default
+ "--includedir=\\\${prefix}/../include"
+ "--datarootdir=\\\${prefix}/share/${PORT}")
+ endif()
+ # Setup common options
+ if(NOT arg_DISABLE_VERBOSE_FLAGS)
+ list(APPEND arg_OPTIONS --disable-silent-rules --verbose)
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ list(APPEND arg_OPTIONS --enable-shared --disable-static)
+ else()
+ list(APPEND arg_OPTIONS --disable-shared --enable-static)
+ endif()
+
+ # Can be set in the triplet to append options for configure
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS)
+ list(APPEND arg_OPTIONS ${VCPKG_CONFIGURE_MAKE_OPTIONS})
+ endif()
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE)
+ list(APPEND arg_OPTIONS_RELEASE ${VCPKG_CONFIGURE_MAKE_OPTIONS_RELEASE})
+ endif()
+ if(DEFINED VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG)
+ list(APPEND arg_OPTIONS_DEBUG ${VCPKG_CONFIGURE_MAKE_OPTIONS_DEBUG})
+ endif()
+
+ file(RELATIVE_PATH relative_build_path "${CURRENT_BUILDTREES_DIR}" "${arg_SOURCE_PATH}/${arg_PROJECT_SUBPATH}")
+
+ # Used by CL
+ vcpkg_host_path_list(PREPEND ENV{INCLUDE} "${CURRENT_INSTALLED_DIR}/include")
+ # Used by GCC
+ vcpkg_host_path_list(PREPEND ENV{C_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include")
+ vcpkg_host_path_list(PREPEND ENV{CPLUS_INCLUDE_PATH} "${CURRENT_INSTALLED_DIR}/include")
+
+ # Flags should be set in the toolchain instead (Setting this up correctly requires a function named vcpkg_determined_cmake_compiler_flags which can also be used to setup CC and CXX etc.)
+ if(VCPKG_TARGET_IS_WINDOWS)
+ vcpkg_backup_env_variables(VARS _CL_ _LINK_)
+ # TODO: Should be CPP flags instead -> rewrite when vcpkg_determined_cmake_compiler_flags defined
+ if(VCPKG_TARGET_IS_UWP)
+ # Be aware that configure thinks it is crosscompiling due to:
+ # error while loading shared libraries: VCRUNTIME140D_APP.dll:
+ # cannot open shared object file: No such file or directory
+ # IMPORTANT: The only way to pass linker flags through libtool AND the compile wrapper
+ # is to use the CL and LINK environment variables !!!
+ # (This is due to libtool and compiler wrapper using the same set of options to pass those variables around)
+ file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}" VCToolsInstallDir)
+ set(_replacement -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG "${VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE}")
+ string(REPLACE "${_replacement}" "" VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE "${VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE}")
+ # Can somebody please check if CMake's compiler flags for UWP are correct?
+ set(ENV{_CL_} "$ENV{_CL_} -FU\"${VCToolsInstallDir}/lib/x86/store/references/platform.winmd\"")
+ set(ENV{_LINK_} "$ENV{_LINK_} ${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ endif()
+ endif()
+
+ # Remove outer quotes from cmake variables which will be forwarded via makefile/shell variables
+ # substituted into makefile commands (e.g. Android NDK has "--sysroot=...")
+ separate_arguments(c_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}")
+ separate_arguments(cxx_libs_list NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}")
+ list(REMOVE_ITEM cxx_libs_list ${c_libs_list})
+ set(all_libs_list ${cxx_libs_list} ${c_libs_list})
+ #Do lib list transformation from name.lib to -lname if necessary
+ set(x_vcpkg_transform_libs ON)
+ if(VCPKG_TARGET_IS_UWP)
+ set(x_vcpkg_transform_libs OFF)
+ # Avoid libtool choke: "Warning: linker path does not have real file for library -lWindowsApp."
+ # The problem with the choke is that libtool always falls back to built a static library even if a dynamic was requested.
+ # Note: Env LIBPATH;LIB are on the search path for libtool by default on windows.
+ # It even does unix/dos-short/unix transformation with the path to get rid of spaces.
+ endif()
+ if(x_vcpkg_transform_libs)
+ list(TRANSFORM all_libs_list REPLACE "[.](dll[.]lib|lib|a|so)$" "")
+ if(VCPKG_TARGET_IS_WINDOWS)
+ list(REMOVE_ITEM all_libs_list "uuid")
+ endif()
+ list(TRANSFORM all_libs_list REPLACE "^([^-].*)" "-l\\1")
+ if(VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ # libtool must be told explicitly that there is no dynamic linkage for uuid.
+ # The "-Wl,..." syntax is understood by libtool and gcc, but no by ld.
+ list(TRANSFORM all_libs_list REPLACE "^-luuid\$" "-Wl,-Bstatic,-luuid,-Bdynamic")
+ endif()
+ endif()
+ if(all_libs_list)
+ list(JOIN all_libs_list " " all_libs_string)
+ if(DEFINED ENV{LIBS})
+ set(ENV{LIBS} "$ENV{LIBS} ${all_libs_string}")
+ else()
+ set(ENV{LIBS} "${all_libs_string}")
+ endif()
+ endif()
+ debug_message("ENV{LIBS}:$ENV{LIBS}")
+
+ # Run autoconf if necessary
+ if (arg_AUTOCONFIG OR requires_autoconfig AND NOT arg_NO_AUTOCONFIG)
+ find_program(AUTORECONF autoreconf)
+ if(NOT AUTORECONF)
+ message(FATAL_ERROR "${PORT} requires autoconf from the system package manager (example: \"sudo apt-get install autoconf\")")
+ endif()
+ message(STATUS "Generating configure for ${TARGET_TRIPLET}")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "autoreconf -vfi"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "autoconf-${TARGET_TRIPLET}"
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND "${AUTORECONF}" -vfi
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "autoconf-${TARGET_TRIPLET}"
+ )
+ endif()
+ message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
+ endif()
+ if(requires_autogen)
+ message(STATUS "Generating configure for ${TARGET_TRIPLET} via autogen.sh")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "./autogen.sh"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "autoconf-${TARGET_TRIPLET}"
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND "./autogen.sh"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "autoconf-${TARGET_TRIPLET}"
+ )
+ endif()
+ message(STATUS "Finished generating configure for ${TARGET_TRIPLET}")
+ endif()
+
+ if (arg_PRERUN_SHELL)
+ message(STATUS "Prerun shell with ${TARGET_TRIPLET}")
+ if (CMAKE_HOST_WIN32)
+ vcpkg_execute_required_process(
+ COMMAND ${base_cmd} -c "${arg_PRERUN_SHELL}"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "prerun-${TARGET_TRIPLET}"
+ )
+ else()
+ vcpkg_execute_required_process(
+ COMMAND "${base_cmd}" -c "${arg_PRERUN_SHELL}"
+ WORKING_DIRECTORY "${src_dir}"
+ LOGNAME "prerun-${TARGET_TRIPLET}"
+ )
+ endif()
+ endif()
+
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug" AND NOT arg_NO_DEBUG)
+ list(APPEND all_buildtypes DEBUG)
+ z_vcpkg_configure_make_process_flags(DEBUG)
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ list(APPEND all_buildtypes RELEASE)
+ z_vcpkg_configure_make_process_flags(RELEASE)
+ endif()
+ list(FILTER z_vcm_all_flags INCLUDE REGEX " ")
+ if(z_vcm_all_flags)
+ list(REMOVE_DUPLICATES z_vcm_all_flags)
+ list(JOIN z_vcm_all_flags "\n " flags)
+ message(STATUS "Warning: Arguments with embedded space may be handled incorrectly by configure:\n ${flags}")
+ endif()
+
+ foreach(var IN ITEMS arg_OPTIONS arg_OPTIONS_RELEASE arg_OPTIONS_DEBUG)
+ vcpkg_list(SET tmp)
+ foreach(element IN LISTS "${var}")
+ string(REPLACE [["]] [[\"]] element "${element}")
+ vcpkg_list(APPEND tmp "\"${element}\"")
+ endforeach()
+ vcpkg_list(JOIN tmp " " "${var}")
+ endforeach()
+
+ foreach(current_buildtype IN LISTS all_buildtypes)
+ foreach(ENV_VAR ${arg_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(DEFINED ENV{${ENV_VAR}})
+ set(backup_config_${ENV_VAR} "$ENV{${ENV_VAR}}")
+ endif()
+ set(ENV{${ENV_VAR}} "${${ENV_VAR}_${current_buildtype}}")
+ endforeach()
+
+ set(target_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_name_${current_buildtype}}")
+ file(MAKE_DIRECTORY "${target_dir}")
+ file(RELATIVE_PATH relative_build_path "${target_dir}" "${src_dir}")
+
+ if(arg_COPY_SOURCE)
+ file(COPY "${src_dir}/" DESTINATION "${target_dir}")
+ set(relative_build_path .)
+ endif()
+
+ # Setup PKG_CONFIG_PATH
+ z_vcpkg_setup_pkgconfig_path(CONFIG "${current_buildtype}")
+
+ # Setup environment
+ set(ENV{CPPFLAGS} "${CPPFLAGS_${current_buildtype}}")
+ set(ENV{CPPFLAGS_FOR_BUILD} "${CPPFLAGS_${current_buildtype}}")
+ set(ENV{CFLAGS} "${CFLAGS_${current_buildtype}}")
+ set(ENV{CFLAGS_FOR_BUILD} "${CFLAGS_${current_buildtype}}")
+ set(ENV{CXXFLAGS} "${CXXFLAGS_${current_buildtype}}")
+ #set(ENV{CXXFLAGS_FOR_BUILD} "${CXXFLAGS_${current_buildtype}}") -> doesn't exist officially
+ set(ENV{RCFLAGS} "${VCPKG_DETECTED_CMAKE_RC_FLAGS_${current_buildtype}}")
+ set(ENV{LDFLAGS} "${LDFLAGS_${current_buildtype}}")
+ set(ENV{LDFLAGS_FOR_BUILD} "${LDFLAGS_${current_buildtype}}")
+ if(ARFLAGS_${current_buildtype} AND NOT (arg_USE_WRAPPERS AND VCPKG_TARGET_IS_WINDOWS))
+ # Target windows with wrappers enabled cannot forward ARFLAGS since it breaks the wrapper
+ set(ENV{ARFLAGS} "${ARFLAGS_${current_buildtype}}")
+ endif()
+
+ if(VCPKG_TARGET_IS_OSX OR VCPKG_TARGET_IS_IOS)
+ # configure not using all flags to check if compiler works ...
+ set(ENV{CC} "$ENV{CC} $ENV{CPPFLAGS} $ENV{CFLAGS}")
+ set(ENV{CC_FOR_BUILD} "$ENV{CC_FOR_BUILD} $ENV{CPPFLAGS} $ENV{CFLAGS}")
+ endif()
+
+ if(LINK_ENV_${current_buildtype})
+ set(link_config_backup "$ENV{_LINK_}")
+ set(ENV{_LINK_} "${LINK_ENV_${current_buildtype}}")
+ else()
+ unset(link_config_backup)
+ endif()
+
+ vcpkg_list(APPEND lib_env_vars LIB LIBPATH LIBRARY_PATH) # LD_LIBRARY_PATH)
+ foreach(lib_env_var IN LISTS lib_env_vars)
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib")
+ endif()
+ if(EXISTS "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib/manual-link")
+ vcpkg_host_path_list(PREPEND ENV{${lib_env_var}} "${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/lib/manual-link")
+ endif()
+ endforeach()
+ unset(lib_env_vars)
+
+ set(command "${base_cmd}" -c "${configure_env} ./${relative_build_path}/configure ${arg_BUILD_TRIPLET} ${arg_OPTIONS} ${arg_OPTIONS_${current_buildtype}}")
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(path_backup $ENV{PATH})
+ vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}${path_suffix_${current_buildtype}}/bin")
+ endif()
+ debug_message("Configure command:'${command}'")
+ if (NOT arg_SKIP_CONFIGURE)
+ message(STATUS "Configuring ${TARGET_TRIPLET}-${short_name_${current_buildtype}}")
+ vcpkg_execute_required_process(
+ COMMAND ${command}
+ WORKING_DIRECTORY "${target_dir}"
+ LOGNAME "config-${TARGET_TRIPLET}-${short_name_${current_buildtype}}"
+ SAVE_LOG_FILES config.log
+ )
+ if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
+ file(GLOB_RECURSE libtool_files "${target_dir}*/libtool")
+ foreach(lt_file IN LISTS libtool_files)
+ file(READ "${lt_file}" _contents)
+ string(REPLACE ".dll.lib" ".lib" _contents "${_contents}")
+ file(WRITE "${lt_file}" "${_contents}")
+ endforeach()
+ endif()
+ endif()
+ z_vcpkg_restore_pkgconfig_path()
+
+ if(DEFINED link_config_backup)
+ set(ENV{_LINK_} "${link_config_backup}")
+ endif()
+
+ if(arg_ADD_BIN_TO_PATH)
+ set(ENV{PATH} "${path_backup}")
+ endif()
+ # Restore environment (config dependent)
+ foreach(ENV_VAR IN LISTS ${arg_CONFIG_DEPENDENT_ENVIRONMENT})
+ if(backup_config_${ENV_VAR})
+ set(ENV{${ENV_VAR}} "${backup_config_${ENV_VAR}}")
+ else()
+ unset(ENV{${ENV_VAR}})
+ endif()
+ endforeach()
+ endforeach()
+
+ # Export matching make program for vcpkg_build_make (cache variable)
+ if(CMAKE_HOST_WIN32 AND MSYS_ROOT)
+ find_program(Z_VCPKG_MAKE make PATHS "${MSYS_ROOT}/usr/bin" NO_DEFAULT_PATH REQUIRED)
+ elseif(VCPKG_HOST_IS_BSD)
+ find_program(Z_VCPKG_MAKE gmake REQUIRED)
+ elseif(VCPKG_HOST_IS_SOLARIS)
+ find_program(Z_VCPKG_MAKE NAMES gmake make REQUIRED)
+ else()
+ find_program(Z_VCPKG_MAKE make REQUIRED)
+ endif()
+
+ # Restore environment
+ vcpkg_restore_env_variables(VARS ${cm_FLAGS} LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
+
+ set(_VCPKG_PROJECT_SOURCE_PATH ${arg_SOURCE_PATH} PARENT_SCOPE)
+ set(_VCPKG_PROJECT_SUBPATH ${arg_PROJECT_SUBPATH} PARENT_SCOPE)
+ set(_VCPKG_MAKE_NO_DEBUG ${arg_NO_DEBUG} PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake b/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake new file mode 100644 index 0000000..ac20f52 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_configure_meson.cmake @@ -0,0 +1,462 @@ +function(z_vcpkg_meson_set_proglist_variables config_type) + if(VCPKG_TARGET_IS_WINDOWS) + set(proglist MT AR) + else() + set(proglist AR RANLIB STRIP NM OBJDUMP DLLTOOL MT) + endif() + foreach(prog IN LISTS proglist) + if(VCPKG_DETECTED_CMAKE_${prog}) + if(meson_${prog}) + string(TOUPPER "MESON_${meson_${prog}}" var_to_set) + set("${var_to_set}" "${meson_${prog}} = ['${VCPKG_DETECTED_CMAKE_${prog}}']" PARENT_SCOPE) + elseif(${prog} STREQUAL AR AND VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${config_type}) + # Probably need to move AR somewhere else + string(TOLOWER "${prog}" proglower) + z_vcpkg_meson_convert_compiler_flags_to_list(ar_flags "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_${config_type}}") + list(PREPEND ar_flags "${VCPKG_DETECTED_CMAKE_${prog}}") + z_vcpkg_meson_convert_list_to_python_array(ar_flags ${ar_flags}) + set("MESON_AR" "${proglower} = ${ar_flags}" PARENT_SCOPE) + else() + string(TOUPPER "MESON_${prog}" var_to_set) + string(TOLOWER "${prog}" proglower) + set("${var_to_set}" "${proglower} = ['${VCPKG_DETECTED_CMAKE_${prog}}']" PARENT_SCOPE) + endif() + endif() + endforeach() + set(compilers "${arg_LANGUAGES}") + if(VCPKG_TARGET_IS_WINDOWS) + list(APPEND compilers RC) + endif() + set(meson_RC windres) + set(meson_Fortran fc) + set(meson_CXX cpp) + foreach(prog IN LISTS compilers) + if(VCPKG_DETECTED_CMAKE_${prog}_COMPILER) + string(TOUPPER "MESON_${prog}" var_to_set) + if(meson_${prog}) + if(VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}) + # Need compiler flags in prog vars for sanity check. + z_vcpkg_meson_convert_compiler_flags_to_list(${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}}") + endif() + list(PREPEND ${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_COMPILER}") + list(FILTER ${prog}flags EXCLUDE REGEX "(-|/)nologo") # Breaks compiler detection otherwise + z_vcpkg_meson_convert_list_to_python_array(${prog}flags ${${prog}flags}) + set("${var_to_set}" "${meson_${prog}} = ${${prog}flags}" PARENT_SCOPE) + if (DEFINED VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID AND NOT VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID MATCHES "^(GNU|Intel)$") + string(TOUPPER "MESON_${prog}_LD" var_to_set) + set(${var_to_set} "${meson_${prog}}_ld = ['${VCPKG_DETECTED_CMAKE_LINKER}']" PARENT_SCOPE) + endif() + else() + if(VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}) + # Need compiler flags in prog vars for sanity check. + z_vcpkg_meson_convert_compiler_flags_to_list(${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_FLAGS_${config_type}}") + endif() + list(PREPEND ${prog}flags "${VCPKG_DETECTED_CMAKE_${prog}_COMPILER}") + list(FILTER ${prog}flags EXCLUDE REGEX "(-|/)nologo") # Breaks compiler detection otherwise + z_vcpkg_meson_convert_list_to_python_array(${prog}flags ${${prog}flags}) + string(TOLOWER "${prog}" proglower) + set("${var_to_set}" "${proglower} = ${${prog}flags}" PARENT_SCOPE) + if (DEFINED VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID AND NOT VCPKG_DETECTED_CMAKE_${prog}_COMPILER_ID MATCHES "^(GNU|Intel)$") + string(TOUPPER "MESON_${prog}_LD" var_to_set) + set(${var_to_set} "${proglower}_ld = ['${VCPKG_DETECTED_CMAKE_LINKER}']" PARENT_SCOPE) + endif() + endif() + endif() + endforeach() +endfunction() + +function(z_vcpkg_meson_convert_compiler_flags_to_list out_var compiler_flags) + separate_arguments(cmake_list NATIVE_COMMAND "${compiler_flags}") + list(TRANSFORM cmake_list REPLACE ";" [[\\;]]) + set("${out_var}" "${cmake_list}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_meson_convert_list_to_python_array out_var) + z_vcpkg_function_arguments(flag_list 1) + vcpkg_list(REMOVE_ITEM flag_list "") # remove empty elements if any + vcpkg_list(JOIN flag_list "', '" flag_list) + set("${out_var}" "['${flag_list}']" PARENT_SCOPE) +endfunction() + +# Generates the required compiler properties for meson +function(z_vcpkg_meson_set_flags_variables config_type) + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + set(libpath_flag /LIBPATH:) + else() + set(libpath_flag -L) + endif() + if(config_type STREQUAL "DEBUG") + set(path_suffix "/debug") + else() + set(path_suffix "") + endif() + + set(includepath "-I${CURRENT_INSTALLED_DIR}/include") + set(libpath "${libpath_flag}${CURRENT_INSTALLED_DIR}${path_suffix}/lib") + + foreach(lang IN LISTS arg_LANGUAGES) + z_vcpkg_meson_convert_compiler_flags_to_list(${lang}flags "${VCPKG_DETECTED_CMAKE_${lang}_FLAGS_${config_type}}") + if(lang MATCHES "^(C|CXX)$") + vcpkg_list(APPEND ${lang}flags "${includepath}") + endif() + z_vcpkg_meson_convert_list_to_python_array(${lang}flags ${${lang}flags}) + set(lang_mapping "${lang}") + if(lang STREQUAL "Fortran") + set(lang_mapping "FC") + endif() + string(TOLOWER "${lang_mapping}" langlower) + if(lang STREQUAL "CXX") + set(langlower cpp) + endif() + set(MESON_${lang_mapping}FLAGS "${langlower}_args = ${${lang}flags}\n") + set(linker_flags "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_${config_type}}") + z_vcpkg_meson_convert_compiler_flags_to_list(linker_flags "${linker_flags}") + vcpkg_list(APPEND linker_flags "${libpath}") + z_vcpkg_meson_convert_list_to_python_array(linker_flags ${linker_flags}) + string(APPEND MESON_${lang_mapping}FLAGS "${langlower}_link_args = ${linker_flags}\n") + set(MESON_${lang_mapping}FLAGS "${MESON_${lang_mapping}FLAGS}" PARENT_SCOPE) + endforeach() +endfunction() + +function(z_vcpkg_get_build_and_host_system build_system host_system is_cross) #https://mesonbuild.com/Cross-compilation.html + set(build_unknown FALSE) + if(CMAKE_HOST_WIN32) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(build_arch $ENV{PROCESSOR_ARCHITEW6432}) + else() + set(build_arch $ENV{PROCESSOR_ARCHITECTURE}) + endif() + if(build_arch MATCHES "(amd|AMD)64") + set(build_cpu_fam x86_64) + set(build_cpu x86_64) + elseif(build_arch MATCHES "(x|X)86") + set(build_cpu_fam x86) + set(build_cpu i686) + elseif(build_arch MATCHES "^(ARM|arm)64$") + set(build_cpu_fam aarch64) + set(build_cpu armv8) + elseif(build_arch MATCHES "^(ARM|arm)$") + set(build_cpu_fam arm) + set(build_cpu armv7hl) + else() + if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE) + message(WARNING "Unsupported build architecture ${build_arch}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!") + endif() + set(build_unknown TRUE) + endif() + elseif(CMAKE_HOST_UNIX) + # at this stage, CMAKE_HOST_SYSTEM_PROCESSOR is not defined + execute_process( + COMMAND uname -m + OUTPUT_VARIABLE MACHINE + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY) + + if(CMAKE_HOST_SOLARIS) + execute_process( + COMMAND isainfo -k + OUTPUT_VARIABLE MACHINE + OUTPUT_STRIP_TRAILING_WHITESPACE + COMMAND_ERROR_IS_FATAL ANY) + endif() + + # Show real machine architecture to visually understand whether we are in a native Apple Silicon terminal or running under Rosetta emulation + debug_message("Machine: ${MACHINE}") + + if(MACHINE MATCHES "arm64|aarch64") + set(build_cpu_fam aarch64) + set(build_cpu armv8) + elseif(MACHINE MATCHES "armv7h?l") + set(build_cpu_fam arm) + set(build_cpu ${MACHINE}) + elseif(MACHINE MATCHES "x86_64|amd64") + set(build_cpu_fam x86_64) + set(build_cpu x86_64) + elseif(MACHINE MATCHES "x86|i686") + set(build_cpu_fam x86) + set(build_cpu i686) + elseif(MACHINE MATCHES "i386") + set(build_cpu_fam x86) + set(build_cpu i386) + elseif(MACHINE MATCHES "loongarch64") + set(build_cpu_fam loongarch64) + set(build_cpu loongarch64) + else() + # https://github.com/mesonbuild/meson/blob/master/docs/markdown/Reference-tables.md#cpu-families + if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE) + message(WARNING "Unhandled machine: ${MACHINE}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!") + endif() + set(build_unknown TRUE) + endif() + else() + if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE) + message(WARNING "Failed to detect the build architecture! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the build_machine entry!") + endif() + set(build_unknown TRUE) + endif() + + set(build "[build_machine]\n") # Machine the build is performed on + string(APPEND build "endian = 'little'\n") + if(CMAKE_HOST_WIN32) + string(APPEND build "system = 'windows'\n") + elseif(CMAKE_HOST_APPLE) + string(APPEND build "system = 'darwin'\n") + elseif(VCPKG_HOST_IS_CYGWIN) + string(APPEND build "system = 'cygwin'\n") + elseif(CMAKE_HOST_UNIX) + string(APPEND build "system = 'linux'\n") + else() + set(build_unknown TRUE) + endif() + + if(DEFINED build_cpu_fam) + string(APPEND build "cpu_family = '${build_cpu_fam}'\n") + endif() + if(DEFINED build_cpu) + string(APPEND build "cpu = '${build_cpu}'") + endif() + if(NOT build_unknown) + set(${build_system} "${build}" PARENT_SCOPE) + endif() + + set(host_unkown FALSE) + if(VCPKG_TARGET_ARCHITECTURE MATCHES "(amd|AMD|x|X)64") + set(host_cpu_fam x86_64) + set(host_cpu x86_64) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "(x|X)86") + set(host_cpu_fam x86) + set(host_cpu i686) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)64$") + set(host_cpu_fam aarch64) + set(host_cpu armv8) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "^(ARM|arm)$") + set(host_cpu_fam arm) + set(host_cpu armv7hl) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "loongarch64") + set(host_cpu_fam loongarch64) + set(host_cpu loongarch64) + elseif(VCPKG_TARGET_ARCHITECTURE MATCHES "wasm32") + set(host_cpu_fam wasm32) + set(host_cpu wasm32) + else() + if(NOT DEFINED VCPKG_MESON_CROSS_FILE OR NOT DEFINED VCPKG_MESON_NATIVE_FILE) + message(WARNING "Unsupported target architecture ${VCPKG_TARGET_ARCHITECTURE}! Please set VCPKG_MESON_(CROSS|NATIVE)_FILE to a meson file containing the host_machine entry!" ) + endif() + set(host_unkown TRUE) + endif() + + set(host "[host_machine]\n") # host=target in vcpkg. + string(APPEND host "endian = 'little'\n") + if(NOT VCPKG_CMAKE_SYSTEM_NAME OR VCPKG_TARGET_IS_MINGW OR VCPKG_TARGET_IS_UWP) + set(meson_system_name "windows") + else() + string(TOLOWER "${VCPKG_CMAKE_SYSTEM_NAME}" meson_system_name) + endif() + string(APPEND host "system = '${meson_system_name}'\n") + string(APPEND host "cpu_family = '${host_cpu_fam}'\n") + string(APPEND host "cpu = '${host_cpu}'") + if(NOT host_unkown) + set(${host_system} "${host}" PARENT_SCOPE) + endif() + + if(NOT build_cpu_fam MATCHES "${host_cpu_fam}" + OR VCPKG_TARGET_IS_ANDROID + OR (VCPKG_TARGET_IS_APPLE AND NOT VCPKG_TARGET_IS_OSX) + OR VCPKG_TARGET_IS_UWP + OR (VCPKG_TARGET_IS_MINGW AND NOT CMAKE_HOST_WIN32)) + set(${is_cross} TRUE PARENT_SCOPE) + endif() +endfunction() + +function(z_vcpkg_meson_setup_extra_windows_variables config_type) + ## b_vscrt + if(VCPKG_CRT_LINKAGE STREQUAL "static") + set(crt_type "mt") + else() + set(crt_type "md") + endif() + if(config_type STREQUAL "DEBUG") + set(crt_type "${crt_type}d") + endif() + set(MESON_VSCRT_LINKAGE "b_vscrt = '${crt_type}'" PARENT_SCOPE) + ## winlibs + separate_arguments(c_winlibs NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES}") + separate_arguments(cpp_winlibs NATIVE_COMMAND "${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + z_vcpkg_meson_convert_list_to_python_array(c_winlibs ${c_winlibs}) + z_vcpkg_meson_convert_list_to_python_array(cpp_winlibs ${cpp_winlibs}) + set(MESON_WINLIBS "c_winlibs = ${c_winlibs}\n") + string(APPEND MESON_WINLIBS "cpp_winlibs = ${cpp_winlibs}") + set(MESON_WINLIBS "${MESON_WINLIBS}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_meson_setup_variables config_type) + set(meson_var_list VSCRT_LINKAGE WINLIBS MT AR RC C C_LD CXX CXX_LD OBJC OBJC_LD OBJCXX OBJCXX_LD FC FC_LD WINDRES CFLAGS CXXFLAGS OBJCFLAGS OBJCXXFLAGS FCFLAGS SHARED_LINKER_FLAGS) + foreach(var IN LISTS meson_var_list) + set(MESON_${var} "") + endforeach() + + if(VCPKG_TARGET_IS_WINDOWS) + z_vcpkg_meson_setup_extra_windows_variables("${config_type}") + endif() + + z_vcpkg_meson_set_proglist_variables("${config_type}") + z_vcpkg_meson_set_flags_variables("${config_type}") + + foreach(var IN LISTS meson_var_list) + set(MESON_${var} "${MESON_${var}}" PARENT_SCOPE) + endforeach() +endfunction() + +function(vcpkg_configure_meson) + # parse parameters such that semicolons in options arguments to COMMAND don't get erased + cmake_parse_arguments(PARSE_ARGV 0 arg + "NO_PKG_CONFIG" + "SOURCE_PATH" + "OPTIONS;OPTIONS_DEBUG;OPTIONS_RELEASE;LANGUAGES;ADDITIONAL_BINARIES;ADDITIONAL_NATIVE_BINARIES;ADDITIONAL_CROSS_BINARIES" + ) + + if(NOT arg_LANGUAGES) + set(arg_LANGUAGES C CXX) + endif() + + if(DEFINED arg_ADDITIONAL_NATIVE_BINARIES OR DEFINED arg_ADDITIONAL_CROSS_BINARIES) + message(WARNING "Options ADDITIONAL_(NATIVE|CROSS)_BINARIES have been deprecated. Only use ADDITIONAL_BINARIES!") + endif() + + vcpkg_list(APPEND arg_ADDITIONAL_BINARIES ${arg_ADDITIONAL_NATIVE_BINARIES} ${arg_ADDITIONAL_CROSS_BINARIES}) + vcpkg_list(REMOVE_DUPLICATES arg_ADDITIONAL_BINARIES) + vcpkg_list(JOIN arg_ADDITIONAL_BINARIES "\n" MESON_ADDITIONAL_BINARIES) + + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + + if(NOT VCPKG_CHAINLOAD_TOOLCHAIN_FILE) + z_vcpkg_select_default_vcpkg_chainload_toolchain() + endif() + z_vcpkg_get_cmake_vars(cmake_vars_file) + debug_message("Including cmake vars from: ${cmake_vars_file}") + include("${cmake_vars_file}") + + vcpkg_find_acquire_program(MESON) + + get_filename_component(CMAKE_PATH "${CMAKE_COMMAND}" DIRECTORY) + vcpkg_add_to_path("${CMAKE_PATH}" PREPEND) # Make CMake invokeable for Meson + + vcpkg_find_acquire_program(PYTHON3) + get_filename_component(PYTHON3_DIR "${PYTHON3}" DIRECTORY) + vcpkg_add_to_path("${PYTHON3_DIR}") + + vcpkg_find_acquire_program(NINJA) + get_filename_component(NINJA_PATH ${NINJA} DIRECTORY) + vcpkg_add_to_path(PREPEND "${NINJA_PATH}") # Prepend to use the correct ninja. + + set(buildtypes "") + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + set(buildname "DEBUG") + vcpkg_list(APPEND buildtypes "${buildname}") + set(path_suffix_${buildname} "debug/") + set(suffix_${buildname} "dbg") + set(meson_input_file_${buildname} "${CURRENT_BUILDTREES_DIR}/meson-${TARGET_TRIPLET}-${suffix_${buildname}}.log") + endif() + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + set(buildname "RELEASE") + vcpkg_list(APPEND buildtypes "${buildname}") + set(path_suffix_${buildname} "") + set(suffix_${buildname} "rel") + set(meson_input_file_${buildname} "${CURRENT_BUILDTREES_DIR}/meson-${TARGET_TRIPLET}-${suffix_${buildname}}.log") + endif() + + vcpkg_list(APPEND arg_OPTIONS --backend ninja --wrap-mode nodownload -Dbuildtype=plain) + + z_vcpkg_get_build_and_host_system(MESON_HOST_MACHINE MESON_BUILD_MACHINE IS_CROSS) + + if(IS_CROSS) + # VCPKG_CROSSCOMPILING is not used since it regresses a lot of ports in x64-windows-x triplets + # For consistency this should proably be changed in the future? + vcpkg_list(APPEND arg_OPTIONS --native "${SCRIPTS}/buildsystems/meson/none.txt") + vcpkg_list(APPEND arg_OPTIONS_DEBUG --cross "${meson_input_file_DEBUG}") + vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${meson_input_file_RELEASE}") + else() + vcpkg_list(APPEND arg_OPTIONS_DEBUG --native "${meson_input_file_DEBUG}") + vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${meson_input_file_RELEASE}") + endif() + + # User provided cross/native files + if(VCPKG_MESON_NATIVE_FILE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE}") + endif() + if(VCPKG_MESON_NATIVE_FILE_RELEASE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE --native "${VCPKG_MESON_NATIVE_FILE_RELEASE}") + endif() + if(VCPKG_MESON_NATIVE_FILE_DEBUG) + vcpkg_list(APPEND arg_OPTIONS_DEBUG --native "${VCPKG_MESON_NATIVE_FILE_DEBUG}") + endif() + if(VCPKG_MESON_CROSS_FILE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${VCPKG_MESON_CROSS_FILE}") + endif() + if(VCPKG_MESON_CROSS_FILE_RELEASE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE --cross "${VCPKG_MESON_CROSS_FILE_RELEASE}") + endif() + if(VCPKG_MESON_CROSS_FILE_DEBUG) + vcpkg_list(APPEND arg_OPTIONS_DEBUG --cross "${VCPKG_MESON_CROSS_FILE_DEBUG}") + endif() + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic") + set(MESON_DEFAULT_LIBRARY shared) + else() + set(MESON_DEFAULT_LIBRARY static) + endif() + + vcpkg_list(APPEND arg_OPTIONS --libdir lib) # else meson install into an architecture describing folder + vcpkg_list(APPEND arg_OPTIONS_DEBUG -Ddebug=true --prefix "${CURRENT_PACKAGES_DIR}/debug" --includedir ../include) + vcpkg_list(APPEND arg_OPTIONS_RELEASE -Ddebug=false --prefix "${CURRENT_PACKAGES_DIR}") + + # select meson cmd-line options + if(VCPKG_TARGET_IS_WINDOWS) + vcpkg_list(APPEND arg_OPTIONS_DEBUG "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/share']") + vcpkg_list(APPEND arg_OPTIONS_RELEASE "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}/share']") + else() + vcpkg_list(APPEND arg_OPTIONS_DEBUG "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}/debug','${CURRENT_INSTALLED_DIR}']") + vcpkg_list(APPEND arg_OPTIONS_RELEASE "-Dcmake_prefix_path=['${CURRENT_INSTALLED_DIR}','${CURRENT_INSTALLED_DIR}/debug']") + endif() + + # Allow overrides / additional configuration variables from triplets + if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS) + vcpkg_list(APPEND arg_OPTIONS ${VCPKG_MESON_CONFIGURE_OPTIONS}) + endif() + if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE) + vcpkg_list(APPEND arg_OPTIONS_RELEASE ${VCPKG_MESON_CONFIGURE_OPTIONS_RELEASE}) + endif() + if(DEFINED VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG) + vcpkg_list(APPEND arg_OPTIONS_DEBUG ${VCPKG_MESON_CONFIGURE_OPTIONS_DEBUG}) + endif() + + # configure build + foreach(buildtype IN LISTS buildtypes) + message(STATUS "Configuring ${TARGET_TRIPLET}-${suffix_${buildtype}}") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${buildtype}}") + #setting up PKGCONFIG + if(NOT arg_NO_PKG_CONFIG) + z_vcpkg_setup_pkgconfig_path(CONFIG "${buildtype}") + endif() + + z_vcpkg_meson_setup_variables(${buildtype}) + configure_file("${SCRIPTS}/buildsystems/meson/meson.template.in" "${meson_input_file_${buildtype}}" @ONLY) + + vcpkg_execute_required_process( + COMMAND ${MESON} ${arg_OPTIONS} ${arg_OPTIONS_${buildtype}} ${arg_SOURCE_PATH} + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${suffix_${buildtype}}" + LOGNAME config-${TARGET_TRIPLET}-${suffix_${buildtype}} + SAVE_LOG_FILES + meson-logs/meson-log.txt + meson-info/intro-dependencies.json + meson-logs/install-log.txt + ) + + message(STATUS "Configuring ${TARGET_TRIPLET}-${suffix_${buildtype}} done") + + if(NOT arg_NO_PKG_CONFIG) + z_vcpkg_restore_pkgconfig_path() + endif() + endforeach() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake new file mode 100644 index 0000000..9340fef --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_configure_qmake.cmake @@ -0,0 +1,167 @@ +function(vcpkg_configure_qmake) + # parse parameters such that semicolons in options arguments to COMMAND don't get erased + cmake_parse_arguments(PARSE_ARGV 0 arg + "" + "SOURCE_PATH" + "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG;BUILD_OPTIONS;BUILD_OPTIONS_RELEASE;BUILD_OPTIONS_DEBUG" + ) + + # Find qmake executable + find_program(qmake_executable NAMES qmake PATHS "${CURRENT_HOST_INSTALLED_DIR}/tools/qt5/bin" NO_DEFAULT_PATH) + + if(NOT qmake_executable) + message(FATAL_ERROR "vcpkg_configure_qmake: unable to find qmake.") + endif() + + z_vcpkg_get_cmake_vars(cmake_vars_file) + include("${cmake_vars_file}") + + function(qmake_append_program var qmake_var value) + get_filename_component(prog "${value}" NAME) + # QMake assumes everything is on PATH? + vcpkg_list(APPEND ${var} "${qmake_var}=${prog}") + find_program(${qmake_var} NAMES "${prog}") + cmake_path(COMPARE "${${qmake_var}}" EQUAL "${value}" correct_prog_on_path) + if(NOT correct_prog_on_path AND NOT "${value}" MATCHES "|:") + message(FATAL_ERROR "Detect path mismatch for '${qmake_var}'. '${value}' is not the same as '${${qmake_var}}'. Please correct your PATH!") + endif() + unset(${qmake_var}) + unset(${qmake_var} CACHE) + set(${var} "${${var}}" PARENT_SCOPE) + endfunction() + # Setup Build tools + set(qmake_build_tools "") + qmake_append_program(qmake_build_tools "QMAKE_CC" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_CXX" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_AR" "${VCPKG_DETECTED_CMAKE_AR}") + qmake_append_program(qmake_build_tools "QMAKE_RANLIB" "${VCPKG_DETECTED_CMAKE_RANLIB}") + qmake_append_program(qmake_build_tools "QMAKE_STRIP" "${VCPKG_DETECTED_CMAKE_STRIP}") + qmake_append_program(qmake_build_tools "QMAKE_NM" "${VCPKG_DETECTED_CMAKE_NM}") + qmake_append_program(qmake_build_tools "QMAKE_RC" "${VCPKG_DETECTED_CMAKE_RC_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_MT" "${VCPKG_DETECTED_CMAKE_MT}") + if(NOT VCPKG_TARGET_IS_WINDOWS OR VCPKG_DETECTED_CMAKE_AR MATCHES "ar$") + vcpkg_list(APPEND qmake_build_tools "QMAKE_AR+=qc") + endif() + if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + qmake_append_program(qmake_build_tools "QMAKE_LIB" "${VCPKG_DETECTED_CMAKE_AR}") + qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_LINKER}") + else() + qmake_append_program(qmake_build_tools "QMAKE_LINK" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_SHLIB" "${VCPKG_DETECTED_CMAKE_CXX_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_C" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + qmake_append_program(qmake_build_tools "QMAKE_LINK_C_SHLIB" "${VCPKG_DETECTED_CMAKE_C_COMPILER}") + endif() + set(qmake_comp_flags "") + macro(qmake_add_flags qmake_var operation flags) + string(STRIP "${flags}" striped_flags) + if(striped_flags) + vcpkg_list(APPEND qmake_comp_flags "${qmake_var}${operation}${striped_flags}") + endif() + endmacro() + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + vcpkg_list(APPEND arg_OPTIONS "CONFIG-=shared" "CONFIG*=static") + else() + vcpkg_list(APPEND arg_OPTIONS "CONFIG-=static" "CONFIG*=shared") + endif() + vcpkg_list(APPEND arg_OPTIONS "CONFIG*=force_debug_info") + + if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_CRT_LINKAGE STREQUAL "static") + vcpkg_list(APPEND arg_OPTIONS "CONFIG*=static_runtime") + endif() + + if(DEFINED VCPKG_OSX_DEPLOYMENT_TARGET) + set(ENV{QMAKE_MACOSX_DEPLOYMENT_TARGET} "${VCPKG_OSX_DEPLOYMENT_TARGET}") + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE) + + set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + + # Cleanup build directories + file(REMOVE_RECURSE "${current_binary_dir}") + + configure_file("${CURRENT_INSTALLED_DIR}/tools/qt5/qt_release.conf" "${current_binary_dir}/qt.conf") + + message(STATUS "Configuring ${TARGET_TRIPLET}-rel") + file(MAKE_DIRECTORY "${current_binary_dir}") + + qmake_add_flags("QMAKE_LIBS" "+=" "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + qmake_add_flags("QMAKE_RC" "+=" "${VCPKG_DETECTED_CMAKE_RC_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_CFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_C_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_CXXFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_LFLAGS" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_LFLAGS_SHLIB" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_LFLAGS_PLUGIN" "+=" "${VCPKG_DETECTED_CMAKE_MODULE_LINKER_FLAGS_RELEASE}") + qmake_add_flags("QMAKE_LIBFLAGS_RELEASE" "+=" "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_RELEASE}") + + vcpkg_list(SET build_opt_param) + if(DEFINED arg_BUILD_OPTIONS OR DEFINED arg_BUILD_OPTIONS_RELEASE) + vcpkg_list(SET build_opt_param -- ${arg_BUILD_OPTIONS} ${arg_BUILD_OPTIONS_RELEASE}) + endif() + + vcpkg_execute_required_process( + COMMAND "${qmake_executable}" CONFIG-=debug CONFIG+=release ${qmake_build_tools} ${qmake_comp_flags} + ${arg_OPTIONS} ${arg_OPTIONS_RELEASE} ${arg_SOURCE_PATH} + -qtconf "${current_binary_dir}/qt.conf" + ${build_opt_param} + WORKING_DIRECTORY "${current_binary_dir}" + LOGNAME "config-${TARGET_TRIPLET}-rel" + SAVE_LOG_FILES config.log + ) + message(STATUS "Configuring ${TARGET_TRIPLET}-rel done") + if(EXISTS "${current_binary_dir}/config.log") + file(REMOVE "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-rel.log") + file(RENAME "${current_binary_dir}/config.log" "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-rel.log") + endif() + + z_vcpkg_restore_pkgconfig_path() + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG) + + set(current_binary_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + + # Cleanup build directories + file(REMOVE_RECURSE "${current_binary_dir}") + + configure_file("${CURRENT_INSTALLED_DIR}/tools/qt5/qt_debug.conf" "${current_binary_dir}/qt.conf") + + message(STATUS "Configuring ${TARGET_TRIPLET}-dbg") + file(MAKE_DIRECTORY "${current_binary_dir}") + + set(qmake_comp_flags "") + qmake_add_flags("QMAKE_LIBS" "+=" "${VCPKG_DETECTED_CMAKE_C_STANDARD_LIBRARIES} ${VCPKG_DETECTED_CMAKE_CXX_STANDARD_LIBRARIES}") + qmake_add_flags("QMAKE_RC" "+=" "${VCPKG_DETECTED_CMAKE_RC_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_CFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_C_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_CXXFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_CXX_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_LFLAGS" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_LFLAGS_SHLIB" "+=" "${VCPKG_DETECTED_CMAKE_SHARED_LINKER_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_LFLAGS_PLUGIN" "+=" "${VCPKG_DETECTED_CMAKE_MODULE_LINKER_FLAGS_DEBUG}") + qmake_add_flags("QMAKE_LIBFLAGS_DEBUG" "+=" "${VCPKG_DETECTED_CMAKE_STATIC_LINKER_FLAGS_DEBUG}") + + vcpkg_list(SET build_opt_param) + if(DEFINED arg_BUILD_OPTIONS OR DEFINED arg_BUILD_OPTIONS_DEBUG) + vcpkg_list(SET build_opt_param -- ${arg_BUILD_OPTIONS} ${arg_BUILD_OPTIONS_DEBUG}) + endif() + vcpkg_execute_required_process( + COMMAND "${qmake_executable}" CONFIG-=release CONFIG+=debug ${qmake_build_tools} ${qmake_comp_flags} + ${arg_OPTIONS} ${arg_OPTIONS_DEBUG} ${arg_SOURCE_PATH} + -qtconf "${current_binary_dir}/qt.conf" + ${build_opt_param} + WORKING_DIRECTORY "${current_binary_dir}" + LOGNAME "config-${TARGET_TRIPLET}-dbg" + SAVE_LOG_FILES config.log + ) + message(STATUS "Configuring ${TARGET_TRIPLET}-dbg done") + if(EXISTS "${current_binary_dir}/config.log") + file(REMOVE "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-dbg.log") + file(RENAME "${current_binary_dir}/config.log" "${CURRENT_BUILDTREES_DIR}/internal-config-${TARGET_TRIPLET}-dbg.log") + endif() + + z_vcpkg_restore_pkgconfig_path() + endif() + +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake b/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake new file mode 100644 index 0000000..5f7bffe --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_copy_pdbs.cmake @@ -0,0 +1,49 @@ +function(vcpkg_copy_pdbs) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "BUILD_PATHS") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT DEFINED arg_BUILD_PATHS) + set(arg_BUILD_PATHS + "${CURRENT_PACKAGES_DIR}/bin/*.dll" + "${CURRENT_PACKAGES_DIR}/debug/bin/*.dll" + ) + endif() + + set(dlls_without_matching_pdbs "") + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" AND VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + file(GLOB_RECURSE dlls ${arg_BUILD_PATHS}) + + set(vslang_backup "$ENV{VSLANG}") + set(ENV{VSLANG} 1033) + + foreach(dll IN LISTS dlls) + execute_process(COMMAND dumpbin /PDBPATH "${dll}" + COMMAND findstr PDB + OUTPUT_VARIABLE pdb_line + ERROR_QUIET + RESULT_VARIABLE error_code + ) + + if(error_code EQUAL "0" AND pdb_line MATCHES "PDB[^/]*(([A-Za-z]:|/).*\\.[Pp][Dd][Bb])") + set(pdb_path "${CMAKE_MATCH_1}") + cmake_path(GET dll PARENT_PATH dll_dir) + file(COPY "${pdb_path}" DESTINATION "${dll_dir}") + else() + list(APPEND dlls_without_matching_pdbs "${dll}") + endif() + endforeach() + + set(ENV{VSLANG} "${vslang_backup}") + + if(NOT dlls_without_matching_pdbs STREQUAL "") + list(JOIN dlls_without_matching_pdbs "\n " message) + message(WARNING "Could not find a matching pdb file for: + ${message}\n") + endif() + endif() + +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake b/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake new file mode 100644 index 0000000..1928df6 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_copy_tool_dependencies.cmake @@ -0,0 +1,45 @@ +function(z_vcpkg_copy_tool_dependencies_search tool_dir path_to_search) + if(DEFINED Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT) + set(count ${Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT}) + else() + set(count 0) + endif() + file(GLOB tools "${tool_dir}/*.exe" "${tool_dir}/*.dll" "${tool_dir}/*.pyd") + foreach(tool IN LISTS tools) + vcpkg_execute_required_process( + COMMAND "${Z_VCPKG_POWERSHELL_CORE}" -noprofile -executionpolicy Bypass -nologo + -file "${SCRIPTS}/buildsystems/msbuild/applocal.ps1" + -targetBinary "${tool}" + -installedDir "${path_to_search}" + -verbose + WORKING_DIRECTORY "${VCPKG_ROOT_DIR}" + LOGNAME copy-tool-dependencies-${count} + ) + math(EXPR count "${count} + 1") + endforeach() + set(Z_VCPKG_COPY_TOOL_DEPENDENCIES_COUNT ${count} CACHE INTERNAL "") +endfunction() + +function(vcpkg_copy_tool_dependencies tool_dir) + if(ARGC GREATER 1) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${ARGN}") + endif() + + if(VCPKG_TARGET_IS_WINDOWS) + find_program(Z_VCPKG_POWERSHELL_CORE pwsh) + if (NOT Z_VCPKG_POWERSHELL_CORE) + message(FATAL_ERROR "Could not find PowerShell Core; please open an issue to report this.") + endif() + cmake_path(RELATIVE_PATH tool_dir + BASE_DIRECTORY "${CURRENT_PACKAGES_DIR}" + OUTPUT_VARIABLE relative_tool_dir + ) + if(relative_tool_dir MATCHES "^debug/|/debug/") + z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_PACKAGES_DIR}/debug/bin") + z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_INSTALLED_DIR}/debug/bin") + else() + z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_PACKAGES_DIR}/bin") + z_vcpkg_copy_tool_dependencies_search("${tool_dir}" "${CURRENT_INSTALLED_DIR}/bin") + endif() + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake b/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake new file mode 100644 index 0000000..d9b3b95 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_copy_tools.cmake @@ -0,0 +1,49 @@ +function(vcpkg_copy_tools)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "AUTO_CLEAN" "SEARCH_DIR;DESTINATION" "TOOL_NAMES")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_TOOL_NAMES)
+ message(FATAL_ERROR "TOOL_NAMES must be specified.")
+ endif()
+
+ if(NOT DEFINED arg_DESTINATION)
+ set(arg_DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+ endif()
+
+ if(NOT DEFINED arg_SEARCH_DIR)
+ set(arg_SEARCH_DIR "${CURRENT_PACKAGES_DIR}/bin")
+ elseif(NOT IS_DIRECTORY "${arg_SEARCH_DIR}")
+ message(FATAL_ERROR "SEARCH_DIR (${arg_SEARCH_DIR}) must be a directory")
+ endif()
+
+ foreach(tool_name IN LISTS arg_TOOL_NAMES)
+ set(tool_path "${arg_SEARCH_DIR}/${tool_name}${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+ set(tool_pdb "${arg_SEARCH_DIR}/${tool_name}.pdb")
+ if(EXISTS "${tool_path}")
+ file(COPY "${tool_path}" DESTINATION "${arg_DESTINATION}")
+ elseif(NOT "${VCPKG_TARGET_BUNDLE_SUFFIX}" STREQUAL "" AND NOT "${VCPKG_TARGET_BUNDLE_SUFFIX}" STREQUAL "${VCPKG_TARGET_EXECUTABLE_SUFFIX}")
+ set(bundle_path "${arg_SEARCH_DIR}/${tool_name}${VCPKG_TARGET_BUNDLE_SUFFIX}")
+ if(EXISTS "${bundle_path}")
+ file(COPY "${bundle_path}" DESTINATION "${arg_DESTINATION}")
+ else()
+ message(FATAL_ERROR "Couldn't find tool \"${tool_name}\":
+ neither \"${tool_path}\" nor \"${bundle_path}\" exists")
+ endif()
+ else()
+ message(FATAL_ERROR "Couldn't find tool \"${tool_name}\":
+ \"${tool_path}\" does not exist")
+ endif()
+ if(EXISTS "${tool_pdb}")
+ file(COPY "${tool_pdb}" DESTINATION "${arg_DESTINATION}")
+ endif()
+ endforeach()
+
+ if(arg_AUTO_CLEAN)
+ vcpkg_clean_executables_in_bin(FILE_NAMES ${arg_TOOL_NAMES})
+ endif()
+
+ vcpkg_copy_tool_dependencies("${arg_DESTINATION}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake b/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake new file mode 100644 index 0000000..1466ea6 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_download_distfile.cmake @@ -0,0 +1,140 @@ +function(vcpkg_download_distfile out_var) + cmake_parse_arguments(PARSE_ARGV 1 arg + "SKIP_SHA512;SILENT_EXIT;QUIET;ALWAYS_REDOWNLOAD" + "FILENAME;SHA512" + "URLS;HEADERS" + ) + + if(NOT DEFINED arg_URLS) + message(FATAL_ERROR "vcpkg_download_distfile requires a URLS argument.") + endif() + if(NOT DEFINED arg_FILENAME) + message(FATAL_ERROR "vcpkg_download_distfile requires a FILENAME argument.") + endif() + if(arg_SILENT_EXIT) + message(WARNING "SILENT_EXIT no longer has any effect. To resolve this warning, remove SILENT_EXIT.") + endif() + + # Note that arg_ALWAYS_REDOWNLOAD implies arg_SKIP_SHA512, and NOT arg_SKIP_SHA512 implies NOT arg_ALWAYS_REDOWNLOAD + if(arg_ALWAYS_REDOWNLOAD AND NOT arg_SKIP_SHA512) + message(FATAL_ERROR "ALWAYS_REDOWNLOAD requires SKIP_SHA512") + endif() + + if(NOT arg_SKIP_SHA512 AND NOT DEFINED arg_SHA512) + message(FATAL_ERROR "vcpkg_download_distfile requires a SHA512 argument. +If you do not know the SHA512, add it as 'SHA512 0' and retry.") + elseif(arg_SKIP_SHA512 AND DEFINED arg_SHA512) + message(FATAL_ERROR "SHA512 may not be used with SKIP_SHA512.") + endif() + + if(_VCPKG_INTERNAL_NO_HASH_CHECK) + set(arg_SKIP_SHA512 1) + endif() + + if(NOT arg_SKIP_SHA512) + if("${arg_SHA512}" STREQUAL "0") + string(REPEAT 0 128 arg_SHA512) + else() + string(LENGTH "${arg_SHA512}" arg_SHA512_length) + if(NOT "${arg_SHA512_length}" EQUAL "128" OR NOT "${arg_SHA512}" MATCHES "^[a-zA-Z0-9]*$") + message(FATAL_ERROR "Invalid SHA512: ${arg_SHA512}. + If you do not know the file's SHA512, set this to \"0\".") + endif() + + string(TOLOWER "${arg_SHA512}" arg_SHA512) + endif() + endif() + + set(downloaded_file_path "${DOWNLOADS}/${arg_FILENAME}") + + get_filename_component(directory_component "${arg_FILENAME}" DIRECTORY) + if ("${directory_component}" STREQUAL "") + file(MAKE_DIRECTORY "${DOWNLOADS}") + else() + file(MAKE_DIRECTORY "${DOWNLOADS}/${directory_component}") + endif() + + if(EXISTS "${downloaded_file_path}") + if(arg_SKIP_SHA512) + if(NOT arg_ALWAYS_REDOWNLOAD) + if(NOT _VCPKG_INTERNAL_NO_HASH_CHECK) + message(STATUS "Skipping hash check and using cached ${arg_FILENAME}") + endif() + + set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE) + return() + endif() + else() + # Note that NOT arg_SKIP_SHA512 implies NOT arg_ALWAYS_REDOWNLOAD + file(SHA512 "${downloaded_file_path}" file_hash) + if("${file_hash}" STREQUAL "${arg_SHA512}") + message(STATUS "Using cached ${arg_FILENAME}") + set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE) + return() + endif() + + # The existing file hash mismatches. Perhaps the expected SHA512 changed. Try adding the expected SHA512 + # into the file name and try again to hopefully not conflict. + get_filename_component(filename_component "${arg_FILENAME}" NAME_WE) + get_filename_component(extension_component "${arg_FILENAME}" EXT) + string(SUBSTRING "${arg_SHA512}" 0 8 hash) + set(arg_FILENAME "${filename_component}-${hash}${extension_component}") + if (NOT "${directory_component}" STREQUAL "") + set(arg_FILENAME "${directory_component}/${arg_FILENAME}") + endif() + + set(downloaded_file_path "${DOWNLOADS}/${arg_FILENAME}") + if(EXISTS "${downloaded_file_path}") + if(_VCPKG_NO_DOWNLOADS) + set(advice_message "note: Downloads are disabled. Please ensure that the expected file is placed at ${downloaded_file_path} and retry.") + else() + set(advice_message "note: You may be able to resolve this failure by redownloading the file. To do so, delete ${downloaded_file_path} and retry.") + endif() + + file(SHA512 "${downloaded_file_path}" file_hash) + if("${file_hash}" STREQUAL "${arg_SHA512}") + message(STATUS "Using cached ${arg_FILENAME}") + set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE) + return() + endif() + + # Note that the extra leading spaces are here to prevent CMake from badly attempting to wrap this + message(FATAL_ERROR + " ${downloaded_file_path}: error: existing downloaded file had an unexpected hash\n" + " Expected: ${arg_SHA512}\n" + " Actual : ${file_hash}\n" + " ${advice_message}") + endif() + endif() + endif() + + # vcpkg_download_distfile_ALWAYS_REDOWNLOAD only triggers when NOT _VCPKG_NO_DOWNLOADS + # this could be de-morgan'd out but it's more clear this way + if(_VCPKG_NO_DOWNLOADS) + message(FATAL_ERROR "Downloads are disabled, but '${downloaded_file_path}' does not exist.") + endif() + + vcpkg_list(SET params "x-download" "${arg_FILENAME}") + foreach(url IN LISTS arg_URLS) + vcpkg_list(APPEND params "--url=${url}") + endforeach() + + foreach(header IN LISTS arg_HEADERS) + list(APPEND params "--header=${header}") + endforeach() + + if(arg_SKIP_SHA512) + vcpkg_list(APPEND params "--skip-sha512") + else() + vcpkg_list(APPEND params "--sha512=${arg_SHA512}") + endif() + + # Setting WORKING_DIRECTORY and passing the relative FILENAME allows vcpkg x-download to print + # the full relative path if FILENAME has /s in it. + vcpkg_execute_in_download_mode(COMMAND "$ENV{VCPKG_COMMAND}" ${params} RESULT_VARIABLE error_code WORKING_DIRECTORY "${DOWNLOADS}") + if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Download failed, halting portfile.") + endif() + + set("${out_var}" "${downloaded_file_path}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake new file mode 100644 index 0000000..a8c1f1f --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_download_sourceforge.cmake @@ -0,0 +1,83 @@ +function(vcpkg_download_sourceforge out_var)
+ cmake_parse_arguments(PARSE_ARGV 1 "arg"
+ ""
+ "REPO;REF;SHA512;FILENAME"
+ "")
+
+ foreach(arg_name IN ITEMS REPO SHA512 FILENAME)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(sourceforge_host "https://sourceforge.net/projects")
+
+ if(arg_REPO MATCHES "^([^/]*)$") # just one element
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "")
+ elseif(arg_REPO MATCHES "^([^/]*)/([^/]*)$") # two elements
+ set(org_name "${CMAKE_MATCH_1}")
+ set(repo_name "${CMAKE_MATCH_2}")
+ else()
+ message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name. It must be:
+ - an organization name without any slashes, or
+ - an organization name followed by a repository name separated by a single slash")
+ endif()
+
+ if(NOT "${arg_REF}" STREQUAL "")
+ set(url "${sourceforge_host}/${org_name}/files/${repo_name}/${arg_REF}/${arg_FILENAME}")
+ else()
+ set(url "${sourceforge_host}/${arg_REPO}/files/${arg_FILENAME}")
+ endif()
+
+ string(SUBSTRING "${arg_SHA512}" 0 10 sanitized_ref)
+
+ set(sourceforge_mirrors
+ cfhcable # United States
+ pilotfiber # New York, NY
+ gigenet # Chicago, IL
+ versaweb # Las Vegas, NV
+ ayera # Modesto, CA
+ netactuate # Durham, NC
+ phoenixnap # Tempe, AZ
+ astuteinternet # Vancouver, BC
+ freefr # Paris, France
+ netcologne # Cologne, Germany
+ deac-riga # Latvia
+ excellmedia # Hyderabad, India
+ iweb # Montreal, QC
+ jaist # Nomi, Japan
+ jztkft # Mezotur, Hungary
+ managedway # Detroit, MI
+ nchc # Taipei, Taiwan
+ netix # Bulgaria
+ ufpr # Curitiba, Brazil
+ tenet # Wynberg, South Africa
+ )
+ if(DEFINED SOURCEFORGE_MIRRORS AND NOT DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ message(WARNING "Extension point SOURCEFORGE_MIRRORS has been deprecated.
+ Please use the replacement VCPKG_SOURCEFORGE_EXTRA_MIRRORS variable instead.")
+ list(APPEND sourceforge_mirrors "${SOURCEFORGE_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ elseif(DEFINED VCPKG_SOURCEFORGE_EXTRA_MIRRORS)
+ list(APPEND sourceforge_mirrors "${VCPKG_SOURCEFORGE_EXTRA_MIRRORS}")
+ list(REMOVE_DUPLICATES sourceforge_mirrors)
+ endif()
+
+ set(all_urls "${url}/download")
+ foreach(mirror IN LISTS sourceforge_mirrors)
+ list(APPEND all_urls "${url}/download?use_mirror=${mirror}")
+ endforeach()
+
+ vcpkg_download_distfile(archive
+ URLS ${all_urls}
+ SHA512 "${arg_SHA512}"
+ FILENAME "${arg_FILENAME}"
+ )
+
+ set("${out_var}" "${archive}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake b/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake new file mode 100644 index 0000000..60fd5b5 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_execute_build_process.cmake @@ -0,0 +1,141 @@ +set(Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES + "LINK : fatal error LNK1102:" + " fatal error C1060: " + # The linker ran out of memory during execution. We will try continuing once more, with parallelism disabled. + "LINK : fatal error LNK1318:" + "LINK : fatal error LNK1104:" + "LINK : fatal error LNK1201:" + "ld terminated with signal 9" + "Killed signal terminated program" + # Multiple threads using the same directory at the same time cause conflicts, will try again. + "Cannot create parent directory" + "Cannot write file" + # Multiple threads caused the wrong order of creating folders and creating files in folders + "Can't open" + # `make install` may stumble over concurrency, in particular with `mkdir` on osx. + "mkdir [^:]*: File exists" +) +list(JOIN Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES "|" Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES) + +function(vcpkg_execute_build_process) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "WORKING_DIRECTORY;LOGNAME" "COMMAND;NO_PARALLEL_COMMAND") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + foreach(required_arg IN ITEMS WORKING_DIRECTORY COMMAND) + if(NOT DEFINED arg_${required_arg}) + message(FATAL_ERROR "${required_arg} must be specified.") + endif() + endforeach() + + if(NOT DEFINED arg_LOGNAME) + message(WARNING "LOGNAME should be specified.") + set(arg_LOGNAME "build") + endif() + + set(log_prefix "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}") + set(log_out "${log_prefix}-out.log") + set(log_err "${log_prefix}-err.log") + set(all_logs "${log_out}" "${log_err}") + + if(X_PORT_PROFILE) + vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time") + if(DEFINED arg_NO_PARALLEL_COMMAND) + vcpkg_list(PREPEND arg_NO_PARALLEL_COMMAND "${CMAKE_COMMAND}" "-E" "time") + endif() + endif() + + execute_process( + COMMAND ${arg_COMMAND} + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + OUTPUT_FILE "${log_out}" + ERROR_FILE "${log_err}" + RESULT_VARIABLE error_code + ) + if (NOT error_code MATCHES "^[0-9]+$") + list(JOIN arg_COMMAND " " command) + message(FATAL_ERROR "Failed to execute command \"${command}\" in working directory \"${arg_WORKING_DIRECTORY}\": ${error_code}") + endif() + if(NOT error_code EQUAL "0") + file(READ "${log_out}" out_contents) + file(READ "${log_err}" err_contents) + set(all_contents "${out_contents}${err_contents}") + if(all_contents MATCHES "${Z_VCPKG_EXECUTE_BUILD_PROCESS_RETRY_ERROR_MESSAGES}") + message(WARNING "Please ensure your system has sufficient memory.") + set(log_out "${log_prefix}-out-1.log") + set(log_err "${log_prefix}-err-1.log") + list(APPEND all_logs "${log_out}" "${log_err}") + + if(DEFINED arg_NO_PARALLEL_COMMAND) + message(STATUS "Restarting build without parallelism") + execute_process( + COMMAND ${arg_NO_PARALLEL_COMMAND} + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + OUTPUT_FILE "${log_out}" + ERROR_FILE "${log_err}" + RESULT_VARIABLE error_code + ) + else() + message(STATUS "Restarting build") + execute_process( + COMMAND ${arg_COMMAND} + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + OUTPUT_FILE "${log_out}" + ERROR_FILE "${log_err}" + RESULT_VARIABLE error_code + ) + endif() + elseif(all_contents MATCHES "mt(\\.exe)? : general error c101008d: ") + # Antivirus workaround - occasionally files are locked and cause mt.exe to fail + message(STATUS "mt.exe has failed. This may be the result of anti-virus. Disabling anti-virus on the buildtree folder may improve build speed") + foreach(iteration RANGE 1 3) + message(STATUS "Restarting Build ${TARGET_TRIPLET}-${SHORT_BUILDTYPE} because of mt.exe file locking issue. Iteration: ${iteration}") + + set(log_out "${log_prefix}-out-${iteration}.log") + set(log_err "${log_prefix}-err-${iteration}.log") + list(APPEND all_logs "${log_out}" "${log_err}") + execute_process( + COMMAND ${arg_COMMAND} + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + OUTPUT_FILE "${log_out}" + ERROR_FILE "${log_err}" + RESULT_VARIABLE error_code + ) + + if(error_code EQUAL "0") + break() + endif() + + file(READ "${log_out}" out_contents) + file(READ "${log_err}" err_contents) + set(all_contents "${out_contents}${err_contents}") + if(NOT all_contents MATCHES "mt : general error c101008d: ") + break() + endif() + endforeach() + endif() + endif() + + if(NOT error_code EQUAL "0") + set(stringified_logs "") + foreach(log IN LISTS all_logs) + if(NOT EXISTS "${log}") + continue() + endif() + file(SIZE "${log}" log_size) + if(NOT log_size EQUAL "0") + file(TO_NATIVE_PATH "${log}" native_log) + string(APPEND stringified_logs " ${native_log}\n") + file(APPEND "${Z_VCPKG_ERROR_LOG_COLLECTION_FILE}" "${native_log}\n") + endif() + endforeach() + z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND}) + message(FATAL_ERROR + " Command failed: ${pretty_command}\n" + " Working Directory: ${arg_WORKING_DIRECTORY}\n" + " See logs for more information:\n" + "${stringified_logs}" + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake b/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake new file mode 100644 index 0000000..2ad1481 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_execute_in_download_mode.cmake @@ -0,0 +1,46 @@ +function(vcpkg_execute_in_download_mode) + # this allows us to grab the value of the output variables, but pass through the rest of the arguments + cmake_parse_arguments(PARSE_ARGV 0 arg "" "RESULT_VARIABLE;RESULTS_VARIABLE;OUTPUT_VARIABLE;ERROR_VARIABLE" "") + + set(output_and_error_same OFF) + set(output_variable_param "") + set(error_variable_param "") + set(result_variable_param "") + set(results_variable_param "") + if(DEFINED arg_OUTPUT_VARIABLE AND DEFINED arg_ERROR_VARIABLE AND arg_OUTPUT_VARIABLE STREQUAL arg_ERROR_VARIABLE) + set(output_variable_param OUTPUT_VARIABLE out_err_var) + set(error_variable_param ERROR_VARIABLE out_err_var) + set(output_and_error_same ON) + else() + if(DEFINED arg_OUTPUT_VARIABLE) + set(output_variable_param OUTPUT_VARIABLE out_var) + endif() + if(DEFINED arg_ERROR_VARIABLE) + set(error_variable_param ERROR_VARIABLE err_var) + endif() + endif() + if(DEFINED arg_RESULT_VARIABLE) + set(result_variable_param RESULT_VARIABLE result_var) + endif() + if(DEFINED arg_RESULTS_VARIABLE) + set(results_variable_param RESULTS_VARIABLE results_var) + endif() + + cmake_language(CALL "${Z_VCPKG_EXECUTE_PROCESS_NAME}" + ${arg_UNPARSED_ARGUMENTS} + ${output_variable_param} + ${error_variable_param} + ${result_variable_param} + ${results_variable_param} + ) + + if(output_and_error_same) + z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_err_var) + else() + z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_var) + z_vcpkg_forward_output_variable(arg_ERROR_VARIABLE err_var) + endif() + + z_vcpkg_forward_output_variable(arg_RESULT_VARIABLE result_var) + z_vcpkg_forward_output_variable(arg_RESULTS_VARIABLE results_var) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake b/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake new file mode 100644 index 0000000..c47bd89 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_execute_required_process.cmake @@ -0,0 +1,144 @@ +function(vcpkg_execute_required_process) + cmake_parse_arguments(PARSE_ARGV 0 arg + "ALLOW_IN_DOWNLOAD_MODE;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE" + "WORKING_DIRECTORY;LOGNAME;TIMEOUT;OUTPUT_VARIABLE;ERROR_VARIABLE" + "COMMAND;SAVE_LOG_FILES" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + foreach(required_arg IN ITEMS WORKING_DIRECTORY COMMAND) + if(NOT DEFINED arg_${required_arg}) + message(FATAL_ERROR "${required_arg} must be specified.") + endif() + endforeach() + + if(NOT DEFINED arg_LOGNAME) + message(WARNING "LOGNAME should be specified.") + set(arg_LOGNAME "required") + endif() + + if (VCPKG_DOWNLOAD_MODE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE) + message(FATAL_ERROR +[[ +This command cannot be executed in Download Mode. +Halting portfile execution. +]]) + endif() + + set(timeout_param "") + if(DEFINED arg_TIMEOUT) + set(timeout_param TIMEOUT "${arg_TIMEOUT}") + endif() + + set(log_out "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out.log") + set(log_err "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-err.log") + set(output_param OUTPUT_FILE "${log_out}") + set(error_param ERROR_FILE "${log_err}") + set(output_and_error_same OFF) + if(DEFINED arg_OUTPUT_VARIABLE AND DEFINED arg_ERROR_VARIABLE AND arg_OUTPUT_VARIABLE STREQUAL arg_ERROR_VARIABLE) + set(output_param OUTPUT_VARIABLE out_err_var) + set(error_param ERROR_VARIABLE out_err_var) + set(output_and_error_same ON) + else() + if(DEFINED arg_OUTPUT_VARIABLE) + set(output_param OUTPUT_VARIABLE out_var) + endif() + if(DEFINED arg_ERROR_VARIABLE) + set(error_param ERROR_VARIABLE err_var) + endif() + endif() + if(arg_OUTPUT_STRIP_TRAILING_WHITESPACE) + list(APPEND output_param OUTPUT_STRIP_TRAILING_WHITESPACE) + endif() + if(arg_ERROR_STRIP_TRAILING_WHITESPACE) + list(APPEND error_param ERROR_STRIP_TRAILING_WHITESPACE) + endif() + + if(X_PORT_PROFILE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE) + vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time") + endif() + + vcpkg_execute_in_download_mode( + COMMAND ${arg_COMMAND} + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + ${timeout_param} + ${output_param} + ${error_param} + ) + + if(output_and_error_same) + file(WRITE "${log_out}" "${out_err_var}") + file(WRITE "${log_err}" "") + else() + if(DEFINED arg_OUTPUT_VARIABLE) + file(WRITE "${log_out}" "${out_var}") + endif() + if(DEFINED arg_ERROR_VARIABLE) + file(WRITE "${log_err}" "${err_var}") + endif() + endif() + vcpkg_list(SET logfiles) + vcpkg_list(SET logfile_copies) + set(expect_alias FALSE) + foreach(item IN LISTS arg_SAVE_LOG_FILES) + if(expect_alias) + vcpkg_list(POP_BACK logfile_copies) + vcpkg_list(APPEND logfile_copies "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-${item}") + set(expect_alias FALSE) + elseif(item STREQUAL "ALIAS") + if(NOT logfiles) + message(FATAL_ERROR "ALIAS used without source file") + endif() + set(expect_alias TRUE) + else() + vcpkg_list(APPEND logfiles "${arg_WORKING_DIRECTORY}/${item}") + cmake_path(GET item FILENAME filename) + if(NOT filename MATCHES "[.]log\$") + string(APPEND filename ".log") + endif() + vcpkg_list(APPEND logfile_copies "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-${filename}") + endif() + endforeach() + vcpkg_list(SET saved_logs) + foreach(logfile logfile_copy IN ZIP_LISTS logfiles logfile_copies) + if(EXISTS "${logfile}") + configure_file("${logfile}" "${logfile_copy}" COPYONLY) + vcpkg_list(APPEND saved_logs "${logfile_copy}") + endif() + endforeach() + if(NOT error_code EQUAL 0) + set(stringified_logs "") + foreach(log IN LISTS saved_logs ITEMS "${log_out}" "${log_err}") + if(NOT EXISTS "${log}") + continue() + endif() + file(SIZE "${log}" log_size) + if(NOT log_size EQUAL "0") + file(TO_NATIVE_PATH "${log}" native_log) + string(APPEND stringified_logs " ${native_log}\n") + file(APPEND "${Z_VCPKG_ERROR_LOG_COLLECTION_FILE}" "${native_log}\n") + endif() + endforeach() + + z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND}) + message(FATAL_ERROR + " Command failed: ${pretty_command}\n" + " Working Directory: ${arg_WORKING_DIRECTORY}\n" + " Error code: ${error_code}\n" + " See logs for more information:\n" + "${stringified_logs}" + ) + endif() + + # pass output parameters back to caller's scope + if(output_and_error_same) + z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_err_var) + # arg_ERROR_VARIABLE = arg_OUTPUT_VARIABLE, so no need to set it again + else() + z_vcpkg_forward_output_variable(arg_OUTPUT_VARIABLE out_var) + z_vcpkg_forward_output_variable(arg_ERROR_VARIABLE err_var) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake new file mode 100644 index 0000000..a13f8fa --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_execute_required_process_repeat.cmake @@ -0,0 +1,71 @@ +function(vcpkg_execute_required_process_repeat) + cmake_parse_arguments(PARSE_ARGV 0 arg + "ALLOW_IN_DOWNLOAD_MODE" + "COUNT;WORKING_DIRECTORY;LOGNAME" + "COMMAND" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + foreach(required_arg IN ITEMS COUNT WORKING_DIRECTORY LOGNAME COMMAND) + if(NOT DEFINED arg_${required_arg}) + message(FATAL_ERROR "${required_arg} must be specified.") + endif() + endforeach() + + # also checks for COUNT being an integer + if(NOT arg_COUNT GREATER_EQUAL "1") + message(FATAL_ERROR "COUNT (${arg_COUNT}) must be greater than or equal to 1.") + endif() + + if (DEFINED VCPKG_DOWNLOAD_MODE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE) + message(FATAL_ERROR +[[ +This command cannot be executed in Download Mode. +Halting portfile execution. +]]) + endif() + + if(X_PORT_PROFILE AND NOT arg_ALLOW_IN_DOWNLOAD_MODE) + vcpkg_list(PREPEND arg_COMMAND "${CMAKE_COMMAND}" "-E" "time") + endif() + + set(all_logs "") + foreach(loop_count RANGE 1 ${arg_COUNT}) + set(out_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log") + set(err_log "${CURRENT_BUILDTREES_DIR}/${arg_LOGNAME}-out-${loop_count}.log") + list(APPEND all_logs "${out_log}" "${err_log}") + + vcpkg_execute_in_download_mode( + COMMAND ${arg_COMMAND} + OUTPUT_FILE "${out_log}" + ERROR_FILE "${err_log}" + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${arg_WORKING_DIRECTORY}" + ) + if(error_code EQUAL "0") + return() + endif() + endforeach() + + set(stringified_logs "") + foreach(log IN LISTS all_logs) + if(NOT EXISTS "${log}") + continue() + endif() + file(SIZE "${log}" log_size) + if(NOT log_size EQUAL "0") + file(TO_NATIVE_PATH "${log}" native_log) + string(APPEND stringified_logs " ${native_log}\n") + endif() + endforeach() + + z_vcpkg_prettify_command_line(pretty_command ${arg_COMMAND}) + message(FATAL_ERROR + " Command failed: ${pretty_command}\n" + " Working Directory: ${arg_WORKING_DIRECTORY}\n" + " See logs for more information:\n" + "${stringified_logs}" + ) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake b/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake new file mode 100644 index 0000000..3c7be77 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_extract_archive.cmake @@ -0,0 +1,45 @@ +function(vcpkg_extract_archive)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "ARCHIVE;DESTINATION"
+ ""
+ )
+
+ foreach(arg_name IN ITEMS ARCHIVE DESTINATION)
+ if(NOT DEFINED "arg_${arg_name}")
+ message(FATAL_ERROR "${arg_name} is required.")
+ endif()
+ endforeach()
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(EXISTS "${arg_DESTINATION}")
+ message(FATAL_ERROR "${arg_DESTINATION} was an extraction target, but it already exists.")
+ endif()
+
+ file(MAKE_DIRECTORY "${arg_DESTINATION}")
+
+ cmake_path(GET arg_ARCHIVE EXTENSION archive_extension)
+ string(TOLOWER "${archive_extension}" archive_extension)
+ if("${archive_extension}" MATCHES [[\.msi$]])
+ cmake_path(NATIVE_PATH arg_ARCHIVE archive_native_path)
+ cmake_path(NATIVE_PATH arg_DESTINATION destination_native_path)
+ cmake_path(GET arg_ARCHIVE PARENT_PATH archive_directory)
+ vcpkg_execute_in_download_mode(
+ COMMAND msiexec
+ /a "${archive_native_path}"
+ /qn "TARGETDIR=${destination_native_path}"
+ WORKING_DIRECTORY "${archive_directory}"
+ )
+ elseif("${archive_extension}" MATCHES [[\.exe$]])
+ vcpkg_execute_in_download_mode(
+ COMMAND "$ENV{VCPKG_COMMAND}" z-extract "${arg_ARCHIVE}" "${arg_DESTINATION}")
+ else()
+ vcpkg_execute_in_download_mode(
+ COMMAND "${CMAKE_COMMAND}" -E tar xzf "${arg_ARCHIVE}"
+ WORKING_DIRECTORY "${arg_DESTINATION}"
+ )
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake b/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake new file mode 100644 index 0000000..7b090c5 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_extract_source_archive.cmake @@ -0,0 +1,158 @@ +function(z_vcpkg_extract_source_archive_deprecated_mode archive working_directory) + cmake_path(GET archive FILENAME archive_filename) + if(NOT EXISTS "${working_directory}/${archive_filename}.extracted") + message(STATUS "Extracting source ${archive}") + vcpkg_extract_archive(ARCHIVE "${archive}" DESTINATION "${working_directory}") + file(TOUCH "${working_directory}/${archive_filename}.extracted") + endif() +endfunction() + +function(vcpkg_extract_source_archive) + if(ARGC LESS_EQUAL "2") + z_vcpkg_deprecation_message( "Deprecated form of vcpkg_extract_source_archive used: + Please use the `vcpkg_extract_source_archive(<out-var> ARCHIVE <archive>)` form.") + if(ARGC EQUAL "0") + message(FATAL_ERROR "vcpkg_extract_source_archive requires at least one argument.") + endif() + + set(archive "${ARGV0}") + if(ARGC EQUAL "1") + set(working_directory "${CURRENT_BUILDTREES_DIR}/src") + else() + set(working_directory "${ARGV1}") + endif() + + z_vcpkg_extract_source_archive_deprecated_mode("${archive}" "${working_directory}") + return() + endif() + + set(out_source_path "${ARGV0}") + cmake_parse_arguments(PARSE_ARGV 1 "arg" + "NO_REMOVE_ONE_LEVEL;SKIP_PATCH_CHECK;Z_ALLOW_OLD_PARAMETER_NAMES" + "ARCHIVE;SOURCE_BASE;BASE_DIRECTORY;WORKING_DIRECTORY;REF" + "PATCHES" + ) + + if(DEFINED arg_REF) + if(NOT arg_Z_ALLOW_OLD_PARAMETER_NAMES) + message(FATAL_ERROR "Unexpected argument REF") + elseif(DEFINED arg_SOURCE_BASE) + message(FATAL_ERROR "Cannot specify both REF and SOURCE_BASE") + else() + string(REPLACE "/" "-" arg_SOURCE_BASE "${arg_REF}") + endif() + endif() + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_ARCHIVE) + message(FATAL_ERROR "ARCHIVE must be specified") + endif() + + if(DEFINED arg_WORKING_DIRECTORY) + if(DEFINED arg_BASE_DIRECTORY) + message(FATAL_ERROR "Cannot specify both BASE_DIRECTORY and WORKING_DIRECTORY") + elseif(NOT IS_ABSOLUTE "${arg_WORKING_DIRECTORY}") + message(FATAL_ERROR "WORKING_DIRECTORY (${arg_WORKING_DIRECTORY}) must be an absolute path") + endif() + set(working_directory "${arg_WORKING_DIRECTORY}") + else() + if(NOT DEFINED arg_BASE_DIRECTORY) + set(arg_BASE_DIRECTORY "src") + elseif(IS_ABSOLUTE "${arg_BASE_DIRECTORY}") + message(FATAL_ERROR "BASE_DIRECTORY (${arg_BASE_DIRECTORY}) must be a relative path") + endif() + cmake_path(APPEND CURRENT_BUILDTREES_DIR "${arg_BASE_DIRECTORY}" + OUTPUT_VARIABLE working_directory) + endif() + + if(NOT DEFINED arg_SOURCE_BASE) + cmake_path(GET arg_ARCHIVE STEM arg_SOURCE_BASE) + elseif(arg_SOURCE_BASE MATCHES [[\\|/]]) + message(FATAL_ERROR "SOURCE_BASE (${arg_SOURCE_BASE}) must not contain slashes") + endif() + + # Take the last 10 chars of the base + set(base_max_length 10) + string(LENGTH "${arg_SOURCE_BASE}" source_base_length) + if(source_base_length GREATER base_max_length) + math(EXPR start "${source_base_length} - ${base_max_length}") + string(SUBSTRING "${arg_SOURCE_BASE}" "${start}" -1 arg_SOURCE_BASE) + endif() + + # Hash the archive hash along with the patches. Take the first 10 chars of the hash + file(SHA512 "${arg_ARCHIVE}" patchset_hash) + foreach(patch IN LISTS arg_PATCHES) + cmake_path(ABSOLUTE_PATH patch + BASE_DIRECTORY "${CURRENT_PORT_DIR}" + OUTPUT_VARIABLE absolute_patch + ) + if(NOT EXISTS "${absolute_patch}") + message(FATAL_ERROR "Could not find patch: '${patch}'") + endif() + file(SHA512 "${absolute_patch}" current_hash) + string(APPEND patchset_hash "${current_hash}") + endforeach() + + string(SHA512 patchset_hash "${patchset_hash}") + string(SUBSTRING "${patchset_hash}" 0 10 patchset_hash) + cmake_path(APPEND working_directory "${arg_SOURCE_BASE}-${patchset_hash}" + OUTPUT_VARIABLE source_path + ) + + if(_VCPKG_EDITABLE AND EXISTS "${source_path}") + set("${out_source_path}" "${source_path}" PARENT_SCOPE) + message(STATUS "Using source at ${source_path}") + return() + elseif(NOT _VCPKG_EDITABLE) + cmake_path(APPEND_STRING source_path ".clean") + if(EXISTS "${source_path}") + message(STATUS "Cleaning sources at ${source_path}. Use --editable to skip cleaning for the packages you specify.") + file(REMOVE_RECURSE "${source_path}") + endif() + endif() + + message(STATUS "Extracting source ${arg_ARCHIVE}") + cmake_path(APPEND_STRING source_path ".tmp" OUTPUT_VARIABLE temp_dir) + file(REMOVE_RECURSE "${temp_dir}") + file(MAKE_DIRECTORY "${temp_dir}") + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${CMAKE_COMMAND}" -E tar xjf "${arg_ARCHIVE}" + WORKING_DIRECTORY "${temp_dir}" + LOGNAME extract + ) + + if(arg_NO_REMOVE_ONE_LEVEL) + cmake_path(SET temp_source_path "${temp_dir}") + else() + file(GLOB archive_directory "${temp_dir}/*") + # Exclude .DS_Store entries created by the finder on macOS + list(FILTER archive_directory EXCLUDE REGEX ".*/.DS_Store$") + # make sure `archive_directory` is only a single file + if(NOT archive_directory MATCHES ";" AND IS_DIRECTORY "${archive_directory}") + cmake_path(SET temp_source_path "${archive_directory}") + else() + message(FATAL_ERROR "Could not unwrap top level directory from archive. Pass NO_REMOVE_ONE_LEVEL to disable this.") + endif() + endif() + + if (arg_SKIP_PATCH_CHECK) + set(quiet_param QUIET) + else() + set(quiet_param "") + endif() + + z_vcpkg_apply_patches( + SOURCE_PATH "${temp_source_path}" + PATCHES ${arg_PATCHES} + ${quiet_param} + ) + + file(RENAME "${temp_source_path}" "${source_path}") + file(REMOVE_RECURSE "${temp_dir}") + + set("${out_source_path}" "${source_path}" PARENT_SCOPE) + message(STATUS "Using source at ${source_path}") +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake b/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake new file mode 100644 index 0000000..b279708 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_extract_source_archive_ex.cmake @@ -0,0 +1,11 @@ +function(vcpkg_extract_source_archive_ex)
+ # OUT_SOURCE_PATH is an out-parameter so we need to parse it
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "OUT_SOURCE_PATH" "")
+ if(NOT DEFINED arg_OUT_SOURCE_PATH)
+ message(FATAL_ERROR "OUT_SOURCE_PATH must be specified")
+ endif()
+
+ vcpkg_extract_source_archive(source_path ${arg_UNPARSED_ARGUMENTS} Z_ALLOW_OLD_PARAMETER_NAMES)
+
+ set("${arg_OUT_SOURCE_PATH}" "${source_path}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake b/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake new file mode 100644 index 0000000..a5cb105 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_fail_port_install.cmake @@ -0,0 +1,78 @@ +function(vcpkg_fail_port_install)
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_fail_port_install has been removed and all values should be moved by adding `supports` field to manifest file or directly adding `${PORT}:${FAILED_TRIPLET}=fail` to _scripts/ci.baseline.txt_.\nPlease remove `vcpkg_fail_port_install(...)`.\n")
+
+ set(multi_args "ON_TARGET;ON_ARCH;ON_CRT_LINKAGE;ON_LIBRARY_LINKAGE")
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "ALWAYS" "MESSAGE" "${multi_args}")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "vcpkg_fail_port_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(arg_ALWAYS)
+ vcpkg_list(SET extra_args)
+ foreach(arg IN LISTS multi_args)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args "${arg}" "${arg_${arg}}")
+ endif()
+ endforeach()
+ if(NOT "${extra_args}" STREQUAL "")
+ message(WARNING "vcpkg_fail_port_install set to fail both unconditionally and conditionally on ${extra_args}. This is likely to be an error.")
+ endif()
+ if(NOT DEFINED arg_MESSAGE)
+ message(FATAL_ERROR "vcpkg_fail_port_install(ALWAYS) was called without a specific MESSAGE.")
+ endif()
+
+ message(FATAL_ERROR "${arg_MESSAGE}")
+ endif()
+
+ if(DEFINED arg_MESSAGE)
+ string(APPEND arg_MESSAGE "\n")
+ else()
+ set(arg_MESSAGE "")
+ endif()
+
+ set(fail_port OFF)
+ # Target fail check
+ if(DEFINED arg_ON_TARGET)
+ foreach(target IN LISTS arg_ON_TARGET)
+ string(TOUPPER "${target}" target_upper)
+ if(VCPKG_TARGET_IS_${target_upper})
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Target '${target}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # Architecture fail check
+ if(DEFINED arg_ON_ARCH)
+ foreach(arch IN LISTS arg_ON_ARCH)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL arch)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Architecture '${arch}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # CRT linkage fail check
+ if(DEFINED arg_ON_CRT_LINKAGE)
+ foreach(crt_linkage IN LISTS arg_ON_CRT_LINKAGE)
+ if(VCPKG_CRT_LINKAGE STREQUAL crt_linkage)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "CRT linkage '${VCPKG_CRT_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ # Library linkage fail check
+ if(DEFINED arg_ON_LIBRARY_LINKAGE)
+ foreach(library_linkage IN LISTS arg_ON_LIBRARY_LINKAGE)
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL library_linkage)
+ set(fail_port ON)
+ string(APPEND arg_MESSAGE "Library linkage '${VCPKG_LIBRARY_LINKAGE}' not supported by ${PORT}!\n")
+ endif()
+ endforeach()
+ endif()
+
+ if(fail_port)
+ message(FATAL_ERROR "${arg_MESSAGE}")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake new file mode 100644 index 0000000..54646a9 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(7Z).cmake @@ -0,0 +1,9 @@ +set(program_name 7z) +if(CMAKE_HOST_WIN32) + set(tool_subdirectory "24.09") + set(paths_to_search "${DOWNLOADS}/tools/7z/${tool_subdirectory}/7z2409/SourceDir/Files/7-Zip") + set(download_urls "https://github.com/ip7z/7zip/releases/download/24.09/7z2409.exe") + set(download_filename "7z2409.7z.exe") + set(search_names "7z.exe") + set(download_sha512 a39a84b13b383ac5fca20eb6d92ec6b8bc85f1b6a545c441efdbe054d8d12c9ebe97d366235bdf1383bbdb2a9666d18d0145b10b6e589180502c0c2dfa26ef14) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake new file mode 100644 index 0000000..59153af --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BAZEL).cmake @@ -0,0 +1,21 @@ +set(program_name bazel) +set(program_version 4.2.2) +set(rename_binary_to "bazel") +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(tool_subdirectory "${program_version}-linux") + set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64") + set(download_filename "bazel-${tool_subdirectory}-x86_64") + set(raw_executable ON) + set(download_sha512 f38619e054df78cab38278a5901b2798f2e25b5cec53358d98278002e713d225fd3df96a209b7f22a2357835a279cee8ef1768e10561b3e9fe6361f324563bb9) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(tool_subdirectory "${program_version}-darwin") + set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64") + set(download_filename "bazel-${tool_subdirectory}-x86_64") + set(raw_executable ON) + set(download_sha512 a3fd8f9d71b0669d742439200f27ee0a3891c1f248df62c841ebb2b416a47534562f429f8a08793b074e9b74f2ede3d97a7e13ac9921c7ee2dc6a2dca8b7f275) +else() + set(tool_subdirectory "${program_version}-windows") + set(download_urls "https://github.com/bazelbuild/bazel/releases/download/${program_version}/bazel-${tool_subdirectory}-x86_64.zip") + set(download_filename "bazel-${tool_subdirectory}-x86_64.zip") + set(download_sha512 8a8196e242964114316232818cb81bfa19ebfd3a029ebf550a241e33b22a6e9ed636dade06411a8706c05c4e73def0bc8d7f45ff0ec5478bcc5de21b5638204d) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake new file mode 100644 index 0000000..ff2ea49 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(BISON).cmake @@ -0,0 +1,23 @@ +if(CMAKE_HOST_WIN32) + # This download shall be the same as in vcpkg_find_acquire_program(FLEX).cmake + # Note that this is 2.5.24 rather than 2.5.25 due to a race in %TEMP% in 2.5.25 + # For more information, see: https://github.com/microsoft/vcpkg/issues/29139 + # or: https://github.com/lexxmark/winflexbison/issues/86 + set(program_version 2.5.24) + set(download_urls "https://github.com/lexxmark/winflexbison/releases/download/v${program_version}/win_flex_bison-${program_version}.zip") + set(download_filename "win_flex_bison-${program_version}.zip") + set(download_sha512 dc89fcdaa7071fbbf88b0755b799d69223240c28736924b4c30968c08e7e0b116c7e05ae98a9257be26a1dfb4aa70a628808a6b6018706bf857555c5b4335018) + set(tool_subdirectory "${program_version}") + set(program_name win_bison) + set(paths_to_search "${DOWNLOADS}/tools/win_flex/${program_version}") + if(NOT EXISTS "${paths_to_search}/data/m4sugar/m4sugar.m4") + file(REMOVE_RECURSE "${paths_to_search}") + endif() +else() + set(program_name bison) + set(apt_package_name bison) + set(brew_package_name bison) + if (CMAKE_HOST_APPLE) + set(paths_to_search /opt/homebrew/opt/bison/bin /usr/local/opt/bison/bin) + endif() +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake new file mode 100644 index 0000000..7bb0df7 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(CLANG).cmake @@ -0,0 +1,31 @@ +set(program_name clang) +set(tool_subdirectory "clang-15.0.6") +set(program_version 15.0.6) +if(CMAKE_HOST_WIN32) + set(paths_to_search + # Support LLVM in Visual Studio 2019 + "$ENV{LLVMInstallDir}/x64/bin" + "$ENV{LLVMInstallDir}/bin" + "$ENV{VCINSTALLDIR}/Tools/Llvm/x64/bin" + "$ENV{VCINSTALLDIR}/Tools/Llvm/bin" + "${DOWNLOADS}/tools/${tool_subdirectory}-windows/bin" + "${DOWNLOADS}/tools/clang/${tool_subdirectory}/bin") + + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}") + else() + set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}") + endif() + + if(host_arch MATCHES "64") + set(download_urls "https://github.com/llvm/llvm-project/releases/download/llvmorg-${program_version}/LLVM-${program_version}-win64.exe") + set(download_filename "LLVM-${program_version}-win64.exe") + set(download_sha512 2dd6f3eea106f2b905e6658ea5ea12856d17285adbfba055edc2d6b6389c4c2f7aa001df5cb0d8fb84fa7fa47d5035a7fddf276523b472dd55f150ae25938768) + else() + set(download_urls "https://github.com/llvm/llvm-project/releases/download/llvmorg-${program_version}/LLVM-${program_version}-win32.exe") + set(download_filename "LLVM-${program_version}-win32.exe") + set(download_sha512 90225D650EADB0E590A9912B479B46A575D41A19EB5F2DA03C4DC8B032DC0790222F0E3706DFE2A35C0E7747941972AC26CB47D3EB13730DB76168931F37E5F1) + endif() +endif() +set(brew_package_name "llvm") +set(apt_package_name "clang") diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake new file mode 100644 index 0000000..9362a7e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DARK).cmake @@ -0,0 +1,8 @@ +set(program_name dark) +if(CMAKE_HOST_WIN32) + set(tool_subdirectory "wix311-binaries") + set(paths_to_search "${DOWNLOADS}/tools/dark/${tool_subdirectory}") + set(download_urls "https://github.com/wixtoolset/wix3/releases/download/wix311rtm/wix311-binaries.zip") + set(download_filename "wix311-binaries.zip") + set(download_sha512 74f0fa29b5991ca655e34a9d1000d47d4272e071113fada86727ee943d913177ae96dc3d435eaf494d2158f37560cd4c2c5274176946ebdb17bf2354ced1c516) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake new file mode 100644 index 0000000..86ebf4f --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(DOXYGEN).cmake @@ -0,0 +1,11 @@ +set(program_name doxygen) +set(program_version 1.9.1) +if(CMAKE_HOST_WIN32) + set(download_filename "doxygen-${program_version}.windows.bin.zip") + set(download_sha512 "c3eeb6b9fa4eab70fb6b0864fbbf94fb8050f3fee38d117cf470921a80e3569cc1c8b0272604d6731e05f01790cfaa70e159bec5d0882fc4f2d8ae4a5d52a21b") + vcpkg_list(SET sourceforge_args + REPO doxygen + REF "rel-${program_version}" + ) + set(tool_subdirectory c3eeb6b9fa-76d69c6db5) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake new file mode 100644 index 0000000..d3bc996 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(FLEX).cmake @@ -0,0 +1,20 @@ +if(CMAKE_HOST_WIN32)
+ # This download shall be the same as in vcpkg_find_acquire_program(BISON).cmake
+ # Note that this is 2.5.24 rather than 2.5.25 due to a race in %TEMP% in 2.5.25
+ # For more information, see: https://github.com/microsoft/vcpkg/issues/29139
+ # or: https://github.com/lexxmark/winflexbison/issues/86
+ set(program_version 2.5.24)
+ set(download_urls "https://github.com/lexxmark/winflexbison/releases/download/v${program_version}/win_flex_bison-${program_version}.zip")
+ set(download_filename "win_flex_bison-${program_version}.zip")
+ set(download_sha512 dc89fcdaa7071fbbf88b0755b799d69223240c28736924b4c30968c08e7e0b116c7e05ae98a9257be26a1dfb4aa70a628808a6b6018706bf857555c5b4335018)
+ set(tool_subdirectory "${program_version}")
+ set(program_name win_flex)
+ set(paths_to_search "${DOWNLOADS}/tools/win_flex/${program_version}")
+ if(NOT EXISTS "${paths_to_search}/data/m4sugar/m4sugar.m4")
+ file(REMOVE_RECURSE "${paths_to_search}")
+ endif()
+else()
+ set(program_name flex)
+ set(apt_package_name flex)
+ set(brew_package_name flex)
+endif()
diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake new file mode 100644 index 0000000..b200864 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GASPREPROCESSOR).cmake @@ -0,0 +1,11 @@ +set(raw_executable true) +set(program_name gas-preprocessor) +set(interpreter PERL) +set(search_names "gas-preprocessor.pl") +set(paths_to_search "${DOWNLOADS}/tools/gas-preprocessor/${tool_subdirectory}") +set(rename_binary_to "gas-preprocessor.pl") +set(commit_id 9309c67acb535ca6248f092e96131d8eb07eefc1) +set(download_urls "https://raw.githubusercontent.com/FFmpeg/gas-preprocessor/${commit_id}/gas-preprocessor.pl") +string(SUBSTRING ${commit_id} 0 8 tool_subdirectory) +set(download_filename "gas-preprocessor-${tool_subdirectory}.pl") +set(download_sha512 b4749cf8aa758e3f28d4b21803422a5c2588f5fc48cfd317564606b374f8d739c636067cf7a4956d7365d63b055bc6e7626c304857e6c9013d6b4a0db9d8ad4f) diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake new file mode 100644 index 0000000..dc6f708 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GIT).cmake @@ -0,0 +1,15 @@ +set(program_name git) +if(CMAKE_HOST_WIN32) + set(base_version 2.32.0) + set(program_version 2.32.0.2) + set(tool_subdirectory "git-${program_version}-2-windows") + set(download_urls "https://github.com/git-for-windows/git/releases/download/v${base_version}.windows.2/PortableGit-${program_version}-32-bit.7z.exe") + set(download_filename "PortableGit-${program_version}-32-bit.7z.exe") + set(download_sha512 867d8534972cbaf7a4224e25a14d484f8d17ef186f8d79e9a758afb90cf69541375cb7615a39702311f4809cb8371ef85c2b1a15bfffe9e48f0e597ac011b348) + set(paths_to_search + "${DOWNLOADS}/tools/${tool_subdirectory}/mingw32/bin" + "${DOWNLOADS}/tools/git/${tool_subdirectory}/mingw32/bin") +else() + set(brew_package_name "git") + set(apt_package_name "git") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake new file mode 100644 index 0000000..eeb025a --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GN).cmake @@ -0,0 +1,49 @@ +set(program_name gn) +set(rename_binary_to "gn") +if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/gn/version.txt") + file(READ "${CURRENT_HOST_INSTALLED_DIR}/share/gn/version.txt" program_version) + set(paths_to_search "${CURRENT_HOST_INSTALLED_DIR}/tools/gn") +else() # Old behavior + message("Consider adding vcpkg-tool-gn as a host dependency of this port or create an issue at https://github.com/microsoft/vcpkg/issues") + set(cipd_download_gn "https://chrome-infra-packages.appspot.com/dl/gn/gn") + if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + execute_process(COMMAND uname -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH STREQUAL "aarch64") + set(program_version "GkfFAfAUyE-qfeWkdUMaeM1Ov64Fk3SjSj9pwKqZX7gC") + set(gn_platform "linux-arm64") + set(download_sha512 "E88201309A12C00CE60137261B8E1A759780C81D1925B819583B16D2095A16A7D32EFB2AF36C1E1D6EAA142BF6A6A811847D3140E4E94967EE28F4ADF6373E4B") + elseif(HOST_ARCH STREQUAL "riscv64") + set(program_version "tauFErkaMkGZN-_03F9DJfMm3DRnaiGOS6SXeLcOswAC") + set(gn_platform "linux-riscv64") + set(download_sha512 "210de22ad5d5634be902c68c6deed08686e252c34218baf30c6bd7266be142740b18d7e6a27b0ef56eb6f75dc5255d5365dff0b98ade482ccba4a32e756a14e5") + else() + set(program_version "Fv1ENXodhXmEXy_xpZr2gQkVJh57w_IsbsrEJOU0_EoC") + set(gn_platform "linux-amd64") + set(download_sha512 "A7A5CD5633C5547EC1B1A95958486DDAAC91F1A65881EDC0AD8F74DF44E82F08BA74358E9A72DFCDDE6F534A6B9C9A430D3E16ACE2E4346C4D2E9113F7654B3F") + endif() + elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + execute_process(COMMAND uname -m OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH STREQUAL "arm64") + set(program_version "qMPtGq7xZlpb-lHjP-SK27ftT4X71WIvguuyx6X14DEC") + set(gn_platform "mac-arm64") + set(download_sha512 "D096FB958D017807427911089AB5A7655AED117F6851C0491AC8063CEDB544423122EF64DF4264ECA86C20A2BDE9E64D7B72DA7ED8C95C2BA79A68B8247D36B8") + else() + set(program_version "0x2juPLNfP9603GIyZrUfflxK6LiMcppLAoxEpYuIYoC") + set(gn_platform "mac-amd64") + set(download_sha512 "2696ECE7B2C8008CABDDF10024017E2ECF875F8679424E77052252BDDC83A2096DF3C61D89CD25120EF27E0458C8914BEEED9D418593BDBC4F6ED33A8D4C3DC5") + endif() + else() + if("$ENV{PROCESSOR_ARCHITECTURE}" STREQUAL "ARM64") + set(program_version "q5ExVHmXyD34Q_Tzb-aRxsPipO-e37-csVRhVM7IJh0C") + set(gn_platform "windows-amd64") + set(download_sha512 "FA764AA44EB6F48ED50E855B4DC1DD1ABE35E45FD4AAC7F059A35293A14894C1B591215E34FB0CE9362E646EA9463BA3B489EFB7EBBAA2693D14238B50E4E686") + else() # AMD64 + set(program_version "q5ExVHmXyD34Q_Tzb-aRxsPipO-e37-csVRhVM7IJh0C") + set(gn_platform "windows-amd64") + set(download_sha512 "FA764AA44EB6F48ED50E855B4DC1DD1ABE35E45FD4AAC7F059A35293A14894C1B591215E34FB0CE9362E646EA9463BA3B489EFB7EBBAA2693D14238B50E4E686") + endif() + endif() +endif() +set(tool_subdirectory "${program_version}") +set(download_urls "${cipd_download_gn}/${gn_platform}/+/${program_version}") +set(download_filename "gn-${gn_platform}.zip") diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake new file mode 100644 index 0000000..fa89f49 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GO).cmake @@ -0,0 +1,55 @@ +set(program_name go) +set(program_version 1.21.1) +set(brew_package_name "go") +set(apt_package_name "golang-go") +if(CMAKE_HOST_WIN32) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(build_arch $ENV{PROCESSOR_ARCHITEW6432}) + else() + set(build_arch $ENV{PROCESSOR_ARCHITECTURE}) + endif() + if(build_arch MATCHES "^(ARM|arm)64$") + set(tool_subdirectory ${program_version}.windows-arm64) + set(download_sha512 cb4bdb042cc773df049e63ba2ef1f93f4da23671e3b233af0a8e5898090659ba9ec6a2d98765e586716e52746288c8723f4eb5b8ed8d49e8c9110b32fe6e7ec7) + elseif(build_arch MATCHES "^(AMD|amd)64$") + set(tool_subdirectory ${program_version}.windows-amd64) + set(download_sha512 c2bf18a8018fab79fbc1dde904d1f7341ab360aec4cd1256bdd3913e5b83cbaf664101b1768e21f17d0fad859cad53a62d37074e0e458f02ee76f4bf4d6810b9) + else() + # Default to x86 for 32-bit systems + set(tool_subdirectory ${program_version}.windows-386) + set(download_sha512 417a4bd95a10f21c2166badd2303e1956d91d0e783e334c99ea0176a323e815729c8c3af3f7ec68f057b757d06bcc75be82584031c4069c89a2db62bbfa902e8) + endif() + set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin") + set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.zip") + set(download_filename "go${tool_subdirectory}.zip") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH MATCHES "x86_64|amd64|AMD64") + set(tool_subdirectory ${program_version}.darwin-amd64) + set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz") + set(download_filename "go${tool_subdirectory}.tar.gz") + set(download_sha512 101f5b3682cb18fea222387427937784447f5f0b748749707e5158ea15e4c3e66d94a7af20470e405e804d46b19a981dcdeaa210881cbe7845b308e806a8b3f9) + elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64") + set(tool_subdirectory ${program_version}.darwin-arm64) + set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz") + set(download_filename "go${tool_subdirectory}.tar.gz") + set(download_sha512 a7ee818bc2853a4d385620823a4dd6d9ca44f3ad1d111783648817e82a3ef4b65edc9f06aeba893ae7d6b44773234ba78eb975f0222eed5eae4d10b029cec78a) + endif() + set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH MATCHES "x86_64|amd64|AMD64") + set(tool_subdirectory ${program_version}.linux-amd64) + set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz") + set(download_filename "go${tool_subdirectory}.tar.gz") + set(download_sha512 4567eefb6c5c524c37543c2d9813d792c2f71c8c2feeda51728a7d8dcf630cc1c6a8932df7d50df53d8f923db46cea3db386caba40e9b3401554a3734a94c9b6) + elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64") + set(tool_subdirectory ${program_version}.linux-arm64) + set(download_urls "https://dl.google.com/go/go${tool_subdirectory}.tar.gz") + set(download_filename "go${tool_subdirectory}.tar.gz") + set(download_sha512 3dec6cbd87253a7fbd5fd8b533f53a7f5a6f1e92a77c5ca270cd3e790b4b45dbdb1512945c521c927f36c5198e2cb4726b29ef94fffe4714918526790efee570) + endif() + set(paths_to_search "${DOWNLOADS}/tools/go/${tool_subdirectory}/go/bin") +else() + message(WARNING "Unsupported host system for prebuilt Go binaries. Skipping...") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake new file mode 100644 index 0000000..dc52162 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(GPERF).cmake @@ -0,0 +1,8 @@ +set(program_name gperf) +set(program_version 3.0.1) +if(CMAKE_HOST_WIN32) + set(download_filename "gperf-${program_version}-bin.zip") + set(download_sha512 3f2d3418304390ecd729b85f65240a9e4d204b218345f82ea466ca3d7467789f43d0d2129fcffc18eaad3513f49963e79775b10cc223979540fa2e502fe7d4d9) + set(download_urls "https://sourceforge.net/projects/gnuwin32/files/gperf/${program_version}/gperf-${program_version}-bin.zip/download") + set(paths_to_search "${DOWNLOADS}/tools/gperf/bin") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake new file mode 100644 index 0000000..f3d5a2d --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(JOM).cmake @@ -0,0 +1,13 @@ +set(program_name jom) +set(program_version_string 1_1_4) +if(CMAKE_HOST_WIN32) + set(download_urls + "https://download.qt.io/official_releases/jom/jom_${program_version_string}.zip" + "https://mirrors.ocf.berkeley.edu/qt/official_releases/jom/jom_${program_version_string}.zip" + "https://mirrors.ukfast.co.uk/sites/qt.io/official_releases/jom/jom_${program_version_string}.zip" + ) + set(download_filename "jom_${program_version_string}.zip") + set(download_sha512 a683bd829c84942223a791dae8abac5cfc2e3fa7de84c6fdc490ad3aa996a26c9fa0be0636890f02c9d56948bbe3225b43497cb590d1cb01e70c6fac447fa17b) + set(tool_subdirectory "jom-${program_version_string}") + set(paths_to_search "${DOWNLOADS}/tools/jom/${tool_subdirectory}") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake new file mode 100644 index 0000000..0774cd9 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(MESON).cmake @@ -0,0 +1,18 @@ +set(program_name meson) +set(search_names meson meson.py) +set(interpreter PYTHON3) +set(apt_package_name "meson") +set(brew_package_name "meson") +set(version_command --version) +set(extra_search_args EXACT_VERSION_MATCH) +if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/meson/version.txt") + file(READ "${CURRENT_HOST_INSTALLED_DIR}/share/meson/version.txt" program_version) + set(paths_to_search "${DOWNLOADS}/tools/meson-${program_version};${CURRENT_HOST_INSTALLED_DIR}/tools/meson") +else() # Old behavior + set(program_version 0.58.1) + set(ref aeda7f249c4a5dbbecc52e44f382246a2377b5b0) + set(paths_to_search "${DOWNLOADS}/tools/meson/meson-${ref}") + set(download_urls "https://github.com/mesonbuild/meson/archive/${ref}.tar.gz") + set(download_filename "meson-${ref}.tar.gz") + set(download_sha512 18a012a45274dbb4582e99fd69d920f38831e788d9860f9553c64847bedb1c2010ae0b5c0ef4a4350c03f5e0f95aaa0395378e1208109b59640c1a70b1e202d2) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake new file mode 100644 index 0000000..fea9ed4 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NASM).cmake @@ -0,0 +1,13 @@ +set(program_name nasm) +set(program_version 2.16.03) +set(brew_package_name "nasm") +set(apt_package_name "nasm") +if(CMAKE_HOST_WIN32) + set(download_urls + "https://www.nasm.us/pub/nasm/releasebuilds/${program_version}/win64/nasm-${program_version}-win64.zip" + "https://vcpkg.github.io/assets/nasm/nasm-${program_version}-win64.zip" + ) + set(download_filename "nasm-${program_version}-win64.zip") + set(download_sha512 22869ceb70ea0e6597fe06abe205b5d5dd66b41fe54dda73d338c488ba6ef13a39158f25b357616bf578752bb112869ef26ad897eb29352e85cf1ecc61a7c07a) + set(paths_to_search "${DOWNLOADS}/tools/nasm/nasm-${program_version}") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake new file mode 100644 index 0000000..de20a43 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NINJA).cmake @@ -0,0 +1,52 @@ +set(program_name ninja) +set(program_version 1.13.1) +set(version_command --version) +if(CMAKE_HOST_WIN32) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(build_arch $ENV{PROCESSOR_ARCHITEW6432}) + else() + set(build_arch $ENV{PROCESSOR_ARCHITECTURE}) + endif() + if(build_arch MATCHES "^(ARM|arm)64$") + set(download_filename "ninja-winarm64-${program_version}.zip") + set(tool_subdirectory "${program_version}-windows-arm64") + set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-winarm64.zip") + set(download_sha512 6a3873522b3397a4d68c6a6c3e389085b81ba5ff20d4f5c289b3974c8bf7169de9cf2c8d9482c2b06846783492620008f486db44c2c651f007b3c335022a472d) + else() + set(download_filename "ninja-win-${program_version}.zip") + set(tool_subdirectory "${program_version}-windows") + set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-win.zip") + set(download_sha512 44955ef9e0053036dc316de3693523ce280338c816b445c27fcbe7dd219543b815812662c9082c409b17d823284506faa5b5c3c5f6d3721242dfc73e56d4ec34) + endif() +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + set(download_filename "ninja-mac-${program_version}.zip") + set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-mac.zip") + set(tool_subdirectory "${program_version}-osx") + set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-osx") + set(download_sha512 72ce74b57d21bcd50c1d457a304a3f4f88d960631a945f754180153a7e747950bc2e34195d0490d2c298bba2c02f96d5a5925b4096ddb7c86b67d35f7579641f) +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD") + set(paths_to_search "${DOWNLOADS}/tools/${tool_subdirectory}-freebsd") + set(version_command "") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD") + set(paths_to_search "${DOWNLOADS}/tools/${tool_subdirectory}-openbsd") + set(version_command "") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH MATCHES "x86_64|amd64|AMD64") + set(download_filename "ninja-linux-${program_version}.zip") + set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-linux.zip") + set(tool_subdirectory "${program_version}-linux") + set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-linux") + set(download_sha512 ca4e424c46c12f4e120ab2030edcff8e34cf5db9d05b4364f2d4be10f46e1a29eef64f7b4bf65fb33cd629b3bc3bcb9292341f92953968ef226f44b52959d916) + elseif(HOST_ARCH MATCHES "arm64|aarch64|ARM64|AARCH64") + set(download_filename "ninja-linux-aarch64-${program_version}.zip") + set(download_urls "https://github.com/ninja-build/ninja/releases/download/v${program_version}/ninja-linux-aarch64.zip") + set(tool_subdirectory "${program_version}-linux-aarch64") + set(paths_to_search "${DOWNLOADS}/tools/ninja-${program_version}-linux-aarch64") + set(download_sha512 7cd841409fd2a4f35566ab2f0add75d89d94cfaa5952bc550cf263878469ab8109e36553b66e6422018012a4e9af4c7eaf79c84af1733d061231ce3511e3c98e) + else() + set(version_command "") # somewhat hacky way to skip version check and use system binary + endif() +else() + set(version_command "") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake new file mode 100644 index 0000000..196b5dd --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(NUGET).cmake @@ -0,0 +1,11 @@ +set(program_name nuget) +set(brew_package_name "nuget") +if(CMAKE_HOST_WIN32) + set(download_urls "https://dist.nuget.org/win-x86-commandline/v6.11.1/nuget.exe") + set(download_filename "nuget.6.11.1.exe") + set(download_sha512 8E139D1C4A97F35625E261DF07AC5B3ECB6B931907D303E3B0FCCA26EC537FF667FF49CA15CB57909B30A262EA39EF678C4CBF33C99658162E58A6648D336D52) + set(tool_subdirectory "6.11.1") + set(paths_to_search "${DOWNLOADS}/tools/nuget-${tool_subdirectory}-windows") + set(raw_executable ON) + set(rename_binary_to "nuget.exe") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake new file mode 100644 index 0000000..146e3f8 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PATCHELF).cmake @@ -0,0 +1,44 @@ +set(program_name patchelf) +if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux") + set(program_version 0.15.5) + vcpkg_execute_in_download_mode(COMMAND "uname" "-m" OUTPUT_VARIABLE HOST_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) + if(HOST_ARCH STREQUAL "x86_64") + set(patchelf_platform "x86_64") + set(download_sha512 "1a638467dc71119d88657e83825bf9c4e65dbb2d3bbbd0267963a507e29429569dc7777490724928c86efc50af82d91b0163b29a09f8f99e62ebf6d9bb1567d2") + elseif(HOST_ARCH MATCHES "i[3-6]86") + set(patchelf_platform "i686") + set(download_sha512 "e27b68e657e440bb262fc8529a615cd71382573d3c8ae4e49ea40accd34338b5fcd05c5b50491329c9b3a134eb8d489a3352399bab8c6d1f0937303d0b6b5a14") + elseif(HOST_ARCH STREQUAL "aarch64") + set(patchelf_platform "aarch64") + set(download_sha512 "f0cc19d7dbf1eeb77f01ad6d9e6e01ebb356adc32b31eeb577de787d93d7292feea98f9027363ab79c08cf645d3c751df31b1e500151fca3597a7fae5b16542b") + elseif(HOST_ARCH STREQUAL "armv7l") + set(patchelf_platform "armv7l") + set(download_sha512 "e9b087d3198837c19ae0d8a30e9b8eb445282107bc6c1a148627a70d7d7dc0843bd570c8865407397e2157b59aa539ab1331862b59325970f94905ad09f1cc57") + elseif(HOST_ARCH STREQUAL "riscv64") + set(patchelf_platform "riscv64") + set(download_sha512 "a88e1a6ddaa6882d1af3582f031e97347098d85fa7baad00a457a9383f79f7f630dd47abc8d34fb6f1ca271ba63c635dbea3931053d0185c77a29750408c24ea") + elseif(HOST_ARCH STREQUAL "ppc64le") + set(patchelf_platform "ppc64le") + set(download_sha512 "fb36a5f032c2fbe377049a860760f8953279c1a0ae080c54f8040cd15abf0a9932668fe10214a16574cec51d328927a36319751c1d4ed6675ed57a2f3615ec69") + elseif(HOST_ARCH STREQUAL "s390x") + set(patchelf_platform "s390x") + set(download_sha512 "e102160c9ee39a52fdc5817548f860884982e7a9bc06eaf13fcc9d9697a46e0929730b398817a00b88e705977d58619bb85e8dc32af8a0017c363ca2ca76a74c") + else() + return() + endif() + set(download_filename "${program_name}-${program_version}-${patchelf_platform}.tar.gz") + set(download_urls "https://github.com/NixOS/patchelf/releases/download/${program_version}/${download_filename}") + set(tool_subdirectory "${program_version}-${patchelf_platform}-linux") + set(paths_to_search "${DOWNLOADS}/tools/patchelf/${program_version}-${patchelf_platform}-linux/bin") +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows") + set(patchelf_host "win32") + set(program_version 0.18.0) + set(download_sha512 +"19d24f64bea6d6236292455a09695d289ddca71433a0ccaf372f57da80a4cde5db1c375ac8e29a41ac1f0676b7d3b56ce5b2baf39e58369c4f741b612db51044") + set(download_filename "${program_name}-${patchelf_host}-${program_version}.exe") + set(download_urls "https://github.com/NixOS/patchelf/releases/download/${program_version}/${download_filename}") + set(tool_subdirectory "${program_version}-${patchelf_host}") + set(paths_to_search "${DOWNLOADS}/tools/patchelf/${program_version}-${patchelf_host}/") + set(raw_executable ON) + set(rename_binary_to "patchelf.exe") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake new file mode 100644 index 0000000..c171c21 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PERL).cmake @@ -0,0 +1,13 @@ +set(program_name perl) +set(program_version 5.42.0.1) +set(brew_package_name "perl") +set(apt_package_name "perl") +if(CMAKE_HOST_WIN32) + set(download_urls + "https://github.com/StrawberryPerl/Perl-Dist-Strawberry/releases/download/SP_54201_64bit/strawberry-perl-5.42.0.1-64bit-portable.zip" + ) + set(download_filename "strawberry-perl-5.42.0.1-64bit-portable.zip") + set(download_sha512 e78fc86eb76dc34f2fd8a911537b20378e1ce486a3ea1a167001fd040c2468e8db5e711a895314e7ead3511f3caafccc1ffbfd0bd4096c0360d712a9668fe69b) + set(tool_subdirectory ${program_version}) + set(paths_to_search ${DOWNLOADS}/tools/perl/${tool_subdirectory}/perl/bin) +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake new file mode 100644 index 0000000..5dc58dc --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PKGCONFIG).cmake @@ -0,0 +1,66 @@ +macro(z_vcpkg_find_acquire_pkgconfig_msys_declare_packages) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/clangarm64/mingw-w64-clang-aarch64-pkgconf-1~2.4.3-1-any.pkg.tar.zst" + SHA512 c2bb144b71bab8d1461c1c56b3b8d0cfe47ff7afd6757cfb5b7d0e887bfa7a9d0e95789da13169f5981a8d555aa4b0a7e2acc841c5a6b06763073f74966f4239 + PROVIDES mingw-w64-clang-aarch64-pkg-config + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-pkgconf-1~2.4.3-1-any.pkg.tar.zst" + SHA512 bd7986cdf104a6e21abc27f270716cf7f93152fdb92733b23dfa0e44465b3e739e9c90a4934419198f856887f1cfe20ba1ef52478b84ea9e795f44e699475e11 + PROVIDES mingw-w64-x86_64-pkg-config + ) + z_vcpkg_acquire_msys_declare_package( + URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-pkgconf-1~2.4.3-1-any.pkg.tar.zst" + SHA512 22b3f5b2b25628713cae722e351f105f7670bc8364e41fd3bf68d8c86866c273215f2c31d467657ccf0e106eedd7c207ff474173f0eaeba5f2d7130ce6a0d3db + PROVIDES mingw-w64-i686-pkg-config + ) +endmacro() + +set(program_name pkg-config) +if(DEFINED "ENV{PKG_CONFIG}") + debug_message(STATUS "PKG_CONFIG found in ENV! Using $ENV{PKG_CONFIG}") + set(PKGCONFIG "$ENV{PKG_CONFIG}" CACHE INTERNAL "") + set(PKGCONFIG "${PKGCONFIG}" PARENT_SCOPE) + return() +elseif(CMAKE_HOST_WIN32) + if(NOT EXISTS "${PKGCONFIG}") + set(program_version 2.1.0) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(host_arch "$ENV{PROCESSOR_ARCHITEW6432}") + else() + set(host_arch "$ENV{PROCESSOR_ARCHITECTURE}") + endif() + + if("${host_arch}" STREQUAL "ARM64") + vcpkg_acquire_msys(PKGCONFIG_ROOT + NO_DEFAULT_PACKAGES + Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages" + PACKAGES mingw-w64-clang-aarch64-pkgconf + ) + set("${program}" "${PKGCONFIG_ROOT}/clangarm64/bin/pkg-config.exe" CACHE INTERNAL "") + elseif("${host_arch}" MATCHES "64") + vcpkg_acquire_msys(PKGCONFIG_ROOT + NO_DEFAULT_PACKAGES + Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages" + PACKAGES mingw-w64-x86_64-pkgconf + ) + set("${program}" "${PKGCONFIG_ROOT}/mingw64/bin/pkg-config.exe" CACHE INTERNAL "") + else() + vcpkg_acquire_msys(PKGCONFIG_ROOT + NO_DEFAULT_PACKAGES + Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages" + PACKAGES mingw-w64-i686-pkgconf + ) + set("${program}" "${PKGCONFIG_ROOT}/mingw32/bin/pkg-config.exe" CACHE INTERNAL "") + endif() + endif() + set("${program}" "${${program}}" PARENT_SCOPE) + return() +else() + set(brew_package_name pkg-config) + set(apt_package_name pkg-config) + set(paths_to_search "/bin" "/usr/bin" "/usr/local/bin") + if(VCPKG_HOST_IS_OSX) + vcpkg_list(PREPEND paths_to_search "/opt/homebrew/bin") + endif() +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake new file mode 100644 index 0000000..7e7905b --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON2).cmake @@ -0,0 +1,27 @@ +if(CMAKE_HOST_WIN32) + set(program_name python) + set(program_version 2.7.18) + if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-tool-python2/details.cmake") + include("${CURRENT_HOST_INSTALLED_DIR}/share/vcpkg-tool-python2/details.cmake") + else() # Old behavior + if (VCPKG_TARGET_ARCHITECTURE STREQUAL x86) + set(tool_subdirectory "python-${program_version}-x86") + set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}.msi") + set(download_filename "python-${program_version}.msi") + set(download_sha512 2c112733c777ddbf189b0a54047a9d5851ebce0564cc38b9687d79ce6c7a09006109dbad8627fb1a60c3ad55e261db850d9dfa454af0533b460b2afc316fe115) + else() + set(tool_subdirectory "python-${program_version}-x64") + set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}.amd64.msi") + set(download_filename "python-${program_version}.amd64.msi") + set(download_sha512 6a81a413b80fd39893e7444fd47efa455d240cbb77a456c9d12f7cf64962b38c08cfa244cd9c50a65947c40f936c6c8c5782f7236d7b92445ab3dd01e82af23e) + endif() + set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}") + endif() +elseif(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin") + # macOS includes Python 2.7 built-in as `python` + set(program_name python) + set(brew_package_name "python2") +else() + set(program_name python2) + set(apt_package_name "python") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake new file mode 100644 index 0000000..9006e9b --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(PYTHON3).cmake @@ -0,0 +1,41 @@ +if(CMAKE_HOST_WIN32) + set(program_name python) + set(program_version 3.12.7) + if(DEFINED ENV{PROCESSOR_ARCHITEW6432}) + set(build_arch $ENV{PROCESSOR_ARCHITEW6432}) + else() + set(build_arch $ENV{PROCESSOR_ARCHITECTURE}) + endif() + if(build_arch MATCHES "^(ARM|arm)64$") + set(tool_subdirectory "python-${program_version}-arm64") + # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-arm64.zip + set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-arm64.zip") + set(download_filename "python-${program_version}-embed-arm64.zip") + set(download_sha512 D1D1183682D20AC057C45BF2AD264B6568CDEB54A1502823C76A2448386CAEF79A3AB9EA8FF57A5C023D432590FCCB5E3E9980F8760CD9BAAC5A2A82BA240D73) + elseif(build_arch MATCHES "(amd|AMD)64") + set(tool_subdirectory "python-${program_version}-x64") + # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-amd64.zip + set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-amd64.zip") + set(download_filename "python-${program_version}-embed-amd64.zip") + set(download_sha512 2F67A8487A9EDECE26B73AAB27E75249E538938AD976D371A9411B54DBAE20AFEAC82B406AD4EEEE38B1CF6F407E7620679D30C0FFF82EC8E8AE62268C322D59) + else() + set(tool_subdirectory "python-${program_version}-x86") + # https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-win32.zip + set(download_urls "https://www.python.org/ftp/python/${program_version}/python-${program_version}-embed-win32.zip") + set(download_filename "python-${program_version}-embed-win32.zip") + set(download_sha512 15542080E0CC25C574391218107FE843006E8C5A7161D1CD48CF14A3C47155C0244587273D9C747F35B15EA17676869ECCE079214824214C1A62ABFC86AD9F9B) + endif() + + # Remove this after the next update + string(APPEND tool_subdirectory "-1") + + set(paths_to_search "${DOWNLOADS}/tools/python/${tool_subdirectory}") + + vcpkg_list(SET post_install_command + "${CMAKE_COMMAND}" "-DPYTHON_DIR=${paths_to_search}" "-DPYTHON_VERSION=${program_version}" -P "${CMAKE_CURRENT_LIST_DIR}/z_vcpkg_make_python_less_embedded.cmake" + ) +else() + set(program_name python3) + set(brew_package_name "python") + set(apt_package_name "python3") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake new file mode 100644 index 0000000..c955e6a --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(RUBY).cmake @@ -0,0 +1,8 @@ +set(program_name "ruby") +set(program_version 2.7.4-1) +if(CMAKE_HOST_WIN32) + set(download_urls "https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-${program_version}/rubyinstaller-${program_version}-x86.7z") + set(download_filename "rubyinstaller-${program_version}-x86.7z") + set(download_sha512 4bf459c987b407bdda328c52d95060bf6ad48fc3e5ed5f64d4b205c5b4153c7a00cb6f9da6c0bcd5f2e001e9dc3dda0b72269ec4afdeffd658b93c085cd1d859) + set(paths_to_search "${DOWNLOADS}/tools/ruby/rubyinstaller-${program_version}-x86/bin") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake new file mode 100644 index 0000000..ddcfcd5 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SCONS).cmake @@ -0,0 +1,9 @@ +set(program_name scons) +set(program_version 4.8.1) +set(interpreter PYTHON3) +set(search_names "scons.py") + +set(download_urls "https://sourceforge.net/projects/scons/files/scons-local-${program_version}.zip/download") +set(download_filename "scons-local-${program_version}.zip") +set(download_sha512 7ce428ccb3279359f916417f0eaca93d36a101b0760156ce53e3aa2c9c3f0a14869aadf49f21a9eb27ba366a27e3f5deab61669e5bf0b43f1547668da940c3b7) +set(tool_subdirectory "${program_version}") diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake new file mode 100644 index 0000000..90bcc0c --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(SWIG).cmake @@ -0,0 +1,14 @@ +set(program_version 4.3.1) +set(program_name swig) +if(CMAKE_HOST_WIN32) + set(download_filename "swigwin-${program_version}.zip") + set(download_sha512 "ca7210684b6ccb1b9bb186797bf1b67bbf3e76f6d0e702fee78edf7456992a4298eb5fa0b5f602a4240161fedd422920fe56e12cd60b8c8fd71c2f784f3d0f43") + vcpkg_list(SET sourceforge_args + REPO swig/swigwin + REF "swigwin-${program_version}" + ) + set(paths_to_search "${DOWNLOADS}/tools/swig/swigwin-${program_version}") +else() + set(apt_package_name "swig") + set(brew_package_name "swig") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake new file mode 100644 index 0000000..ae8c877 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program(YASM).cmake @@ -0,0 +1,12 @@ +set(program_name yasm) +set(program_version 1.3.0.6.g1962) +set(brew_package_name "yasm") +set(apt_package_name "yasm") +if(CMAKE_HOST_WIN32) + set(download_urls "https://www.tortall.net/projects/yasm/snapshots/v${program_version}/yasm-${program_version}.exe") + set(download_filename "yasm-${program_version}.exe") + set(download_sha512 c1945669d983b632a10c5ff31e86d6ecbff143c3d8b2c433c0d3d18f84356d2b351f71ac05fd44e5403651b00c31db0d14615d7f9a6ecce5750438d37105c55b) + set(tool_subdirectory 1.3.0.6) + set(raw_executable ON) + set(rename_binary_to "yasm.exe") +endif() diff --git a/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake b/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake new file mode 100644 index 0000000..4dc2c0e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_acquire_program.cmake @@ -0,0 +1,236 @@ +function(z_vcpkg_find_acquire_program_version_check out_var) + cmake_parse_arguments(PARSE_ARGV 1 arg + "EXACT_VERSION_MATCH" + "MIN_VERSION;PROGRAM_NAME" + "COMMAND" + ) + vcpkg_execute_in_download_mode( + COMMAND ${arg_COMMAND} + WORKING_DIRECTORY "${VCPKG_ROOT_DIR}" + OUTPUT_VARIABLE program_version_output + ) + string(STRIP "${program_version_output}" program_version_output) + #TODO: REGEX MATCH case for more complex cases! + set(version_compare VERSION_GREATER_EQUAL) + set(version_compare_msg "at least") + if(arg_EXACT_VERSION_MATCH) + set(version_compare VERSION_EQUAL) + set(version_compare_msg "exact") + endif() + if(NOT "${program_version_output}" ${version_compare} "${arg_MIN_VERSION}") + message(STATUS "Found ${arg_PROGRAM_NAME}('${program_version_output}') but ${version_compare_msg} version ${arg_MIN_VERSION} is required! Trying to use internal version if possible!") + set("${out_var}" OFF PARENT_SCOPE) + else() + message(STATUS "Found external ${arg_PROGRAM_NAME}('${program_version_output}').") + set("${out_var}" ON PARENT_SCOPE) + endif() +endfunction() + +function(z_vcpkg_find_acquire_program_find_external program) + cmake_parse_arguments(PARSE_ARGV 1 arg + "EXACT_VERSION_MATCH" + "INTERPRETER;MIN_VERSION;PROGRAM_NAME" + "NAMES;VERSION_COMMAND" + ) + if(arg_EXACT_VERSION_MATCH) + set(arg_EXACT_VERSION_MATCH EXACT_VERSION_MATCH) + endif() + + if("${arg_INTERPRETER}" STREQUAL "") + find_program("${program}" NAMES ${arg_NAMES}) + else() + find_file(SCRIPT_${arg_PROGRAM_NAME} NAMES ${arg_NAMES}) + if(SCRIPT_${arg_PROGRAM_NAME}) + vcpkg_list(SET program_tmp ${${interpreter}} ${SCRIPT_${arg_PROGRAM_NAME}}) + set("${program}" "${program_tmp}" CACHE INTERNAL "") + else() + set("${program}" "" CACHE INTERNAL "") + endif() + unset(SCRIPT_${arg_PROGRAM_NAME} CACHE) + endif() + + if("${version_command}" STREQUAL "") + set(version_is_good ON) # can't check for the version being good, so assume it is + elseif(${program}) # only do a version check if ${program} has a value + z_vcpkg_find_acquire_program_version_check(version_is_good + ${arg_EXACT_VERSION_MATCH} + COMMAND ${${program}} ${arg_VERSION_COMMAND} + MIN_VERSION "${arg_MIN_VERSION}" + PROGRAM_NAME "${arg_PROGRAM_NAME}" + ) + endif() + + if(NOT version_is_good) + unset("${program}" PARENT_SCOPE) + unset("${program}" CACHE) + endif() +endfunction() + +function(z_vcpkg_find_acquire_program_find_internal program) + cmake_parse_arguments(PARSE_ARGV 1 arg + "" + "INTERPRETER" + "NAMES;PATHS" + ) + if("${arg_INTERPRETER}" STREQUAL "") + find_program(${program} + NAMES ${arg_NAMES} + PATHS ${arg_PATHS} + NO_DEFAULT_PATH) + else() + vcpkg_find_acquire_program("${arg_INTERPRETER}") + find_file(SCRIPT_${program} + NAMES ${arg_NAMES} + PATHS ${arg_PATHS} + NO_DEFAULT_PATH) + if(SCRIPT_${program}) + if(arg_INTERPRETER MATCHES "PYTHON") + set("${program}" ${${arg_INTERPRETER}} -I ${SCRIPT_${program}} CACHE INTERNAL "") + else() + set("${program}" ${${arg_INTERPRETER}} ${SCRIPT_${program}} CACHE INTERNAL "") + endif() + endif() + unset(SCRIPT_${program} CACHE) + endif() +endfunction() + +function(vcpkg_find_acquire_program program) + if(${program}) + return() + endif() + + set(raw_executable "OFF") + set(program_name "") + set(program_version "") + set(search_names "") + set(download_urls "") + set(download_filename "") + set(download_sha512 "") + set(rename_binary_to "") + set(tool_subdirectory "") + set(interpreter "") + set(post_install_command "") + set(paths_to_search "") + set(version_command "") + vcpkg_list(SET sourceforge_args) + set(brew_package_name "") + set(apt_package_name "") + + set(program_information "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/vcpkg_find_acquire_program(${program}).cmake") + if(program MATCHES "^[A-Z0-9]+\$" AND EXISTS "${program_information}") + include("${program_information}") + else() + message(FATAL_ERROR "unknown tool ${program} -- unable to acquire.") + endif() + + if("${program_name}" STREQUAL "") + message(FATAL_ERROR "Internal error: failed to initialize program_name for program ${program}") + endif() + + set(full_subdirectory "${DOWNLOADS}/tools/${program_name}/${tool_subdirectory}") + if(NOT "${tool_subdirectory}" STREQUAL "") + list(APPEND paths_to_search ${full_subdirectory}) + endif() + if("${full_subdirectory}" MATCHES [[^(.*)[/\\]+$]]) + # remove trailing slashes, which may turn into a trailing `\` which CMake _does not like_ + set(full_subdirectory "${CMAKE_MATCH_1}") + endif() + + if("${search_names}" STREQUAL "") + set(search_names "${program_name}") + endif() + + z_vcpkg_find_acquire_program_find_internal("${program}" + INTERPRETER "${interpreter}" + PATHS ${paths_to_search} + NAMES ${search_names} + ) + if(NOT ${program}) + z_vcpkg_find_acquire_program_find_external("${program}" + ${extra_search_args} + PROGRAM_NAME "${program_name}" + MIN_VERSION "${program_version}" + INTERPRETER "${interpreter}" + NAMES ${search_names} + VERSION_COMMAND ${version_command} + ) + endif() + if(NOT ${program}) + if("${download_urls}" STREQUAL "" AND "${sourceforge_args}" STREQUAL "") + set(example ".") + if(NOT "${brew_package_name}" STREQUAL "" AND VCPKG_HOST_IS_OSX) + set(example ":\n brew install ${brew_package_name}") + elseif(NOT "${apt_package_name}" STREQUAL "" AND VCPKG_HOST_IS_LINUX) + set(example ":\n sudo apt-get install ${apt_package_name}") + endif() + message(FATAL_ERROR "Could not find ${program_name}. Please install it via your package manager${example}") + endif() + + if("${sourceforge_args}" STREQUAL "") + vcpkg_download_distfile(archive_path + URLS ${download_urls} + SHA512 "${download_sha512}" + FILENAME "${download_filename}" + ) + else() + vcpkg_download_sourceforge(archive_path + ${sourceforge_args} + SHA512 "${download_sha512}" + FILENAME "${download_filename}" + ) + endif() + if(raw_executable) + file(MAKE_DIRECTORY "${full_subdirectory}") + if("${rename_binary_to}" STREQUAL "") + file(COPY "${archive_path}" + DESTINATION "${full_subdirectory}" + FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) + else() + file(INSTALL "${archive_path}" + DESTINATION "${full_subdirectory}" + RENAME "${rename_binary_to}" + FILE_PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE + ) + endif() + elseif(tool_subdirectory STREQUAL "") + # The effective tool subdir is owned by the extracted paths of the archive. + # *** This behavior is provided for convenience and short paths. *** + # There must be no overlap between different providers of subdirs. + # Otherwise tool_subdirectory must be used in order to separate extracted trees. + file(REMOVE_RECURSE "${full_subdirectory}.temp") + vcpkg_extract_archive(ARCHIVE "${archive_path}" DESTINATION "${full_subdirectory}.temp") + file(COPY "${full_subdirectory}.temp/" DESTINATION "${full_subdirectory}") + file(REMOVE_RECURSE "${full_subdirectory}.temp") + else() + vcpkg_extract_archive(ARCHIVE "${archive_path}" DESTINATION "${full_subdirectory}") + endif() + + if(NOT "${post_install_command}" STREQUAL "") + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND ${post_install_command} + WORKING_DIRECTORY "${full_subdirectory}" + LOGNAME "${program}-tool-post-install" + ) + endif() + unset("${program}") + unset("${program}" CACHE) + z_vcpkg_find_acquire_program_find_internal("${program}" + INTERPRETER "${interpreter}" + PATHS ${paths_to_search} + NAMES ${search_names} + ) + if(NOT ${program}) + message(FATAL_ERROR "Unable to find ${program}") + endif() + endif() + + set("${program}" "${${program}}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake b/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake new file mode 100644 index 0000000..730aed8 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_find_fortran.cmake @@ -0,0 +1,212 @@ +list(APPEND Z_VCPKG_ACQUIRE_MSYS_DECLARE_PACKAGE_COMMANDS "z_vcpkg_find_fortran_declare_msys_packages")
+
+function(vcpkg_find_fortran out_var)
+ if("${ARGC}" GREATER "1")
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra args: ${ARGN}")
+ endif()
+
+ vcpkg_list(SET additional_cmake_args)
+
+ set(CMAKE_BINARY_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}")
+ set(CMAKE_CURRENT_BINARY_DIR "${CMAKE_BINARY_DIR}")
+ set(CMAKE_PLATFORM_INFO_DIR "${CMAKE_BINARY_DIR}/Platform")
+ macro(z_vcpkg_warn_ambiguous_system_variables)
+ # CMakeDetermineFortranCompiler is for project mode.
+ endmacro()
+ include(CMakeDetermineFortranCompiler)
+
+ if(NOT CMAKE_Fortran_COMPILER AND "${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}" STREQUAL "")
+ # If a user uses their own VCPKG_CHAINLOAD_TOOLCHAIN_FILE, they _must_ figure out fortran on their own.
+ if(CMAKE_HOST_WIN32)
+ message(STATUS "No Fortran compiler found on the PATH. Using MinGW gfortran!")
+ # If no Fortran compiler is on the path we switch to use gfortan from MinGW within vcpkg
+ if("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x86")
+ set(mingw_path mingw32)
+ set(machine_flag -m32)
+ vcpkg_acquire_msys(msys_root
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
+ PACKAGES mingw-w64-i686-gcc-fortran
+ )
+ elseif("${VCPKG_TARGET_ARCHITECTURE}" STREQUAL "x64")
+ set(mingw_path mingw64)
+ set(machine_flag -m64)
+ vcpkg_acquire_msys(msys_root
+ NO_DEFAULT_PACKAGES
+ Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages"
+ PACKAGES mingw-w64-x86_64-gcc-fortran
+ )
+ else()
+ message(FATAL_ERROR "Unknown architecture '${VCPKG_TARGET_ARCHITECTURE}' for MinGW Fortran build!")
+ endif()
+
+ set(mingw_bin "${msys_root}/${mingw_path}/bin")
+ vcpkg_add_to_path(PREPEND "${mingw_bin}")
+ vcpkg_list(APPEND additional_cmake_args
+ -DCMAKE_GNUtoMS=ON
+ "-DCMAKE_Fortran_COMPILER=${mingw_bin}/gfortran.exe"
+ "-DCMAKE_C_COMPILER=${mingw_bin}/gcc.exe"
+ "-DCMAKE_Fortran_FLAGS_INIT:STRING= -mabi=ms ${machine_flag} ${VCPKG_Fortran_FLAGS}")
+
+ # This is for private use by vcpkg-gfortran
+ set(vcpkg_find_fortran_MSYS_ROOT "${msys_root}" PARENT_SCOPE)
+ set(VCPKG_USE_INTERNAL_Fortran TRUE PARENT_SCOPE)
+ set(VCPKG_POLICY_SKIP_DUMPBIN_CHECKS enabled PARENT_SCOPE)
+ set(VCPKG_CHAINLOAD_TOOLCHAIN_FILE "${SCRIPTS}/toolchains/mingw.cmake" PARENT_SCOPE) # Switching to MinGW toolchain for Fortran
+ if(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINKAGE dynamic PARENT_SCOPE)
+ message(STATUS "VCPKG_CRT_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic CRT linkage")
+ endif()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ set(VCPKG_LIBRARY_LINKAGE dynamic PARENT_SCOPE)
+ message(STATUS "VCPKG_LIBRARY_LINKAGE linkage for ${PORT} using vcpkg's internal gfortran cannot be static due to linking against MinGW libraries. Forcing dynamic library linkage")
+ endif()
+ else()
+ message(FATAL_ERROR "Unable to find a Fortran compiler using 'CMakeDetermineFortranCompiler'. Please install one (e.g. gfortran) and make it available on the PATH!")
+ endif()
+ endif()
+ set("${out_var}" "${additional_cmake_args}" PARENT_SCOPE)
+endfunction()
+
+macro(z_vcpkg_find_fortran_msys_declare_packages)
+ # primary package for x86
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-fortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 dd8633b15a2aeb9510410612b8e43e3ecdd61d89ada76d5aa1fa2b7f3273ac666027c56c5cbfcfdbe21a0309b4d3002f730acdfa3c693847db3cf92f914fb619
+ PROVIDES mingw-w64-i686-fc
+ DEPS mingw-w64-i686-gcc mingw-w64-i686-gcc-libgfortran mingw-w64-i686-gcc-libs mingw-w64-i686-gmp mingw-w64-i686-isl mingw-w64-i686-libwinpthread mingw-w64-i686-mpc mingw-w64-i686-mpfr mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-binutils-2.44-3-any.pkg.tar.zst"
+ SHA512 7ce793ec986313ffce56b59457365a0067737f7497520c8bbdee9e6585d16b1def4b8a73fbb302ce581e5cb3eaa959bfac3819c08b2c2e28f685bbcc0988088a
+ DEPS mingw-w64-i686-gettext-runtime mingw-w64-i686-libwinpthread mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-crt-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 f9a0250c0601014893152a68d3d430c03b01d9232510181b41b41a9a9bc11bf1e951ce853f070e96aedf40487d2a3b93018078dc770b8f3fcbf07dc6e1080835
+ PROVIDES mingw-w64-i686-crt
+ DEPS mingw-w64-i686-headers-git
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-15.1.0-5-any.pkg.tar.zst"
+ SHA512 754c5372dc9f63fd9783bc2e8f925c01b36805857efa73a619ef5163e0a740ea7b4c95ce1b44d5803f332da939bb3a09c14dc5379bb2d6b0b64deb31caeed3b3
+ PROVIDES mingw-w64-i686-gcc-base mingw-w64-i686-cc
+ DEPS mingw-w64-i686-binutils mingw-w64-i686-crt mingw-w64-i686-gcc-libs mingw-w64-i686-gmp mingw-w64-i686-headers mingw-w64-i686-isl mingw-w64-i686-libiconv mingw-w64-i686-mpc mingw-w64-i686-mpfr mingw-w64-i686-windows-default-manifest mingw-w64-i686-winpthreads mingw-w64-i686-zlib mingw-w64-i686-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-libgfortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 320d956a85ca95407c26d206431e79d0f0c3aaf10f48870a72ec0ceebabbecb4f7d767c27b0d8284b024b1c116137c39751df64e20435d5f9cac61b34d8e5da0
+ PROVIDES mingw-w64-i686-fc-libs
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gcc-libs-15.1.0-5-any.pkg.tar.zst"
+ SHA512 8f8f547ff5343cb5132e90cb8632b0ac2091459510abaec5e4a2a1a77e88d57e644587e2f8fc06eca9c43fec3e8b12c3e803273980bd311a3d4350d635bd6015
+ PROVIDES mingw-w64-i686-omp
+ DEPS mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gettext-runtime-0.25-1-any.pkg.tar.zst"
+ SHA512 e487f6c994e9997bf5a17e7ddb6d601def1b25bd38fa113aed6fe4c66af3071f93d751d593fae87eabf1b31f0796991c8333a619573f3d027cabb6b12a0abdd7
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-libiconv
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-gmp-6.3.0-2-any.pkg.tar.zst"
+ SHA512 4a9e0ace05ea441fe6cd69b1b1af4c29e35727069ab1f22d0da7febc7aaba219502b5b4dea8b1aa070cb2c8b731da112429c3339fd03fe77828d9fa262b4a818
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-headers-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 858057afb80945d61dd1aeb6de99d4c14b4eab37748f583f8f41be481afedf8ef46904b48f9f364624ce2b2c267ecfbb393e35fdfa0be409d3acd6c7ec3088e0
+ PROVIDES mingw-w64-i686-headers
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-isl-0.27-1-any.pkg.tar.zst"
+ SHA512 070e87552aa0ce77bb9db3b6104c7a3b0d9b5f3515dffc5d03d586693661a9c4681d54ffa6209203bdd568cf111ecae2b26df7472cf40144d6537d655d01b178
+ DEPS mingw-w64-i686-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-libiconv-1.18-1-any.pkg.tar.zst"
+ SHA512 c45f62552dd57e53b80b2aa541322586255c11846be92ee8554f0c336b9d3f93382cefab613ff3ba61b4cff30a3beb91ccb1f472d89470c4399de81515c52c95
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-libwinpthread-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 ab5b2ecebf7809a9cc252ccc9e15d40bff28a7d63a332fbff8e230748fb4535491697495930f1b7d289f6d9e4fc6d2cd73baba284aaee19d93d2cbeeb5668ff8
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-mpc-1.3.1-2-any.pkg.tar.zst"
+ SHA512 936acdedea20b9892f90ebdb0b75250d1ed3d65487316ee986b8672683b01d4e1f2922387f18ea8d6befb71bf273995d4940ff55b645d07996c98bd50c9382ae
+ DEPS mingw-w64-i686-gmp mingw-w64-i686-mpfr
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-mpfr-4.2.2-1-any.pkg.tar.zst"
+ SHA512 002964eaa63ee3f602c580cedb995564ffd45f2468088af4b7f2096e0da96b2537a377054c60d9550689a66fbe58eb476db581db6935a44685b5c5c097915323
+ DEPS mingw-w64-i686-gcc-libs mingw-w64-i686-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-windows-default-manifest-6.4-4-any.pkg.tar.zst"
+ SHA512 103f8437e13fb2a839c5eb89f49f5888c71f7934771cf3b2dcca46d520277fe7f7d4841c9d415b454a6a581c6d1f806d6be7f614027df0484f2642ef2563e889
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-winpthreads-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 167b913ac66636e88624c7890fb7749423dce2708dec0e0b83a71baa445418d3439560b08a77af9992a313e7c00cf05a5776b3098c0bc1ea665f342fd3247491
+ DEPS mingw-w64-i686-crt-git mingw-w64-i686-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-zlib-1.3.1-1-any.pkg.tar.zst"
+ SHA512 881cf37f59bfbc3d8a6a6d16226360b63cf3d5abc82bb25fa1d9f871aa3e620fa22a8ae6b0cec619633d08550b72ad289f16b75d5819e3e117de0607125b0140
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw32/mingw-w64-i686-zstd-1.5.7-1-any.pkg.tar.zst"
+ SHA512 fa266dd3628322629412e64ff0f092f2a233ba05a65305cfffbdeeb82d954f681ed23e381cb3a5886034c9723bd40fd993303bdbe99f26fe179a69f3f7f8c4b5
+ DEPS mingw-w64-i686-gcc-libs
+ )
+
+ # primary package for x64
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-fortran-15.1.0-5-any.pkg.tar.zst"
+ SHA512 042fbdfae03fa05cb297687b8b85f4e78237e4d4f8106c0763254caa7e3f93b341f507415dc6395cd2432461cb48c94de8c0828248e84cf99b369a81fa879813
+ PROVIDES mingw-w64-x86_64-fc
+ DEPS mingw-w64-x86_64-gcc mingw-w64-x86_64-gcc-libgfortran mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp mingw-w64-x86_64-isl mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-mpc mingw-w64-x86_64-mpfr mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-binutils-2.44-3-any.pkg.tar.zst"
+ SHA512 67b0367389f481fc8da4a4d16ffa886a28ef994cb1726c84b5e43a1cbc648474359ed9c159444d09121b23972ad88f30db8934484b6ff7cbb4a67d5351c6dd7c
+ DEPS mingw-w64-x86_64-gettext-runtime mingw-w64-x86_64-libwinpthread mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-crt-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 0568b22cb5686743a7b84f1655e65236c23d8911da9cb4ed4e984df737741fb4ec5430fe0f42bd7f5b8b021678828ad6fdf605885bac8318317a5cc2661706d6
+ PROVIDES mingw-w64-x86_64-crt
+ DEPS mingw-w64-x86_64-headers-git
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-gcc-15.1.0-5-any.pkg.tar.zst"
+ SHA512 283817fae25eeb1f2d97c4b07b2cad375617a8bf31a949369a6c9454ce345d864f5640db991ab04de8942ce2ef1ea08f6ee785e43f404807d3e04002736df636
+ PROVIDES mingw-w64-x86_64-gcc-base mingw-w64-x86_64-cc
+ DEPS mingw-w64-x86_64-binutils mingw-w64-x86_64-crt mingw-w64-x86_64-gcc-libs mingw-w64-x86_64-gmp mingw-w64-x86_64-headers mingw-w64-x86_64-isl mingw-w64-x86_64-libiconv mingw-w64-x86_64-mpc mingw-w64-x86_64-mpfr mingw-w64-x86_64-windows-default-manifest mingw-w64-x86_64-winpthreads mingw-w64-x86_64-zlib mingw-w64-x86_64-zstd
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-headers-git-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 0bb6b97449d423177cab7e2496850c6e00f858654fae8085eb2910f6fb67e403eff5a6cbd5cc45a28c22d9bf3bb27a138a55c43ecd52bfb020629bd98e81ed4c
+ PROVIDES mingw-w64-x86_64-headers
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-isl-0.27-1-any.pkg.tar.zst"
+ SHA512 879e3a6748f552b9c3574090b8d45fd83ff1cb843eae3924e6025464ecfc9d4883bd3d9e9dbcd54481820a6f5a01b33e3dc8e2c90bc812d8173412ee01a08110
+ DEPS mingw-w64-x86_64-gmp
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-windows-default-manifest-6.4-4-any.pkg.tar.zst"
+ SHA512 d7e1e4c79f6c7db3bd97305ff89e407a32d3ce9f2a18083b9674538d018651e889efb6fdef00cc79c78f8c07852eab63d7fc705e9567b1ad5684f0a704adeaf3
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-winpthreads-12.0.0.r747.g1a99f8514-1-any.pkg.tar.zst"
+ SHA512 e20ba4171f2f18230dac3f8dbc058e912741c005a124dcb9192ef3e5a349b000d6251a2aba1b462d0f98e8366260ccb8407b2c4ed5a345d5761b20e985566323
+ DEPS mingw-w64-x86_64-crt-git mingw-w64-x86_64-libwinpthread
+ )
+ z_vcpkg_acquire_msys_declare_package(
+ URL "https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-zstd-1.5.7-1-any.pkg.tar.zst"
+ SHA512 35b8dfb55b22de813ca29cf2c38fe2912616c66c211706ea39551936c3d3b80b663a3d7e57698ca2300d026d9966fe6a36193a1e3503f3ca538f3e9e8ce75b55
+ DEPS mingw-w64-x86_64-gcc-libs
+ )
+endmacro()
\ No newline at end of file diff --git a/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake b/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake new file mode 100644 index 0000000..3d8a8ba --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_fixup_cmake_targets.cmake @@ -0,0 +1,186 @@ +function(vcpkg_fixup_cmake_targets) + if(Z_VCPKG_CMAKE_CONFIG_FIXUP_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake-config; using both vcpkg-cmake-config and vcpkg_fixup_cmake_targets in the same port is unsupported.") + endif() + + cmake_parse_arguments(PARSE_ARGV 0 arg "DO_NOT_DELETE_PARENT_CONFIG_PATH;NO_PREFIX_CORRECTION" "CONFIG_PATH;TARGET_PATH;TOOLS_PATH" "") + + if(arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "vcpkg_fixup_cmake_targets was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT arg_TARGET_PATH) + set(arg_TARGET_PATH share/${PORT}) + endif() + + if(NOT arg_TOOLS_PATH) + set(arg_TOOLS_PATH tools/${PORT}) + endif() + + string(REPLACE "." "\\." EXECUTABLE_SUFFIX "${VCPKG_TARGET_EXECUTABLE_SUFFIX}") + + set(DEBUG_SHARE ${CURRENT_PACKAGES_DIR}/debug/${arg_TARGET_PATH}) + set(RELEASE_SHARE ${CURRENT_PACKAGES_DIR}/${arg_TARGET_PATH}) + + if(arg_CONFIG_PATH AND NOT RELEASE_SHARE STREQUAL "${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH}") + if(arg_CONFIG_PATH STREQUAL "share") + file(RENAME ${CURRENT_PACKAGES_DIR}/debug/share ${CURRENT_PACKAGES_DIR}/debug/share2) + file(RENAME ${CURRENT_PACKAGES_DIR}/share ${CURRENT_PACKAGES_DIR}/share2) + set(arg_CONFIG_PATH share2) + endif() + + set(DEBUG_CONFIG ${CURRENT_PACKAGES_DIR}/debug/${arg_CONFIG_PATH}) + set(RELEASE_CONFIG ${CURRENT_PACKAGES_DIR}/${arg_CONFIG_PATH}) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + if(NOT EXISTS ${DEBUG_CONFIG}) + message(FATAL_ERROR "'${DEBUG_CONFIG}' does not exist.") + endif() + + # This roundabout handling enables CONFIG_PATH share + file(MAKE_DIRECTORY ${DEBUG_SHARE}) + file(GLOB FILES ${DEBUG_CONFIG}/*) + file(COPY ${FILES} DESTINATION ${DEBUG_SHARE}) + file(REMOVE_RECURSE ${DEBUG_CONFIG}) + endif() + + file(GLOB FILES ${RELEASE_CONFIG}/*) + file(COPY ${FILES} DESTINATION ${RELEASE_SHARE}) + file(REMOVE_RECURSE ${RELEASE_CONFIG}) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG} NAME) + string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME) + if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH) + file(REMOVE_RECURSE ${DEBUG_CONFIG}) + else() + get_filename_component(DEBUG_CONFIG_PARENT_DIR ${DEBUG_CONFIG} DIRECTORY) + get_filename_component(DEBUG_CONFIG_DIR_NAME ${DEBUG_CONFIG_PARENT_DIR} NAME) + string(TOLOWER "${DEBUG_CONFIG_DIR_NAME}" DEBUG_CONFIG_DIR_NAME) + if(DEBUG_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH) + file(REMOVE_RECURSE ${DEBUG_CONFIG_PARENT_DIR}) + endif() + endif() + endif() + + get_filename_component(RELEASE_CONFIG_DIR_NAME ${RELEASE_CONFIG} NAME) + string(TOLOWER "${RELEASE_CONFIG_DIR_NAME}" RELEASE_CONFIG_DIR_NAME) + if(RELEASE_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH) + file(REMOVE_RECURSE ${RELEASE_CONFIG}) + else() + get_filename_component(RELEASE_CONFIG_PARENT_DIR ${RELEASE_CONFIG} DIRECTORY) + get_filename_component(RELEASE_CONFIG_DIR_NAME ${RELEASE_CONFIG_PARENT_DIR} NAME) + string(TOLOWER "${RELEASE_CONFIG_DIR_NAME}" RELEASE_CONFIG_DIR_NAME) + if(RELEASE_CONFIG_DIR_NAME STREQUAL "cmake" AND NOT arg_DO_NOT_DELETE_PARENT_CONFIG_PATH) + file(REMOVE_RECURSE ${RELEASE_CONFIG_PARENT_DIR}) + endif() + endif() + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + if(NOT EXISTS "${DEBUG_SHARE}") + message(FATAL_ERROR "'${DEBUG_SHARE}' does not exist.") + endif() + endif() + + file(GLOB_RECURSE UNUSED_FILES + "${DEBUG_SHARE}/*[Tt]argets.cmake" + "${DEBUG_SHARE}/*[Cc]onfig.cmake" + "${DEBUG_SHARE}/*[Cc]onfigVersion.cmake" + "${DEBUG_SHARE}/*[Cc]onfig-version.cmake" + ) + if(UNUSED_FILES) + file(REMOVE ${UNUSED_FILES}) + endif() + + file(GLOB_RECURSE RELEASE_TARGETS + "${RELEASE_SHARE}/*-release.cmake" + ) + foreach(RELEASE_TARGET IN LISTS RELEASE_TARGETS) + file(READ ${RELEASE_TARGET} _contents) + string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}") + string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \"]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" _contents "${_contents}") + file(WRITE ${RELEASE_TARGET} "${_contents}") + endforeach() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + file(GLOB_RECURSE DEBUG_TARGETS + "${DEBUG_SHARE}/*-debug.cmake" + ) + foreach(DEBUG_TARGET IN LISTS DEBUG_TARGETS) + file(RELATIVE_PATH DEBUG_TARGET_REL "${DEBUG_SHARE}" "${DEBUG_TARGET}") + + file(READ ${DEBUG_TARGET} _contents) + string(REPLACE "${CURRENT_INSTALLED_DIR}" "\${_IMPORT_PREFIX}" _contents "${_contents}") + string(REGEX REPLACE "\\\${_IMPORT_PREFIX}/bin/([^ \";]+${EXECUTABLE_SUFFIX})" "\${_IMPORT_PREFIX}/${arg_TOOLS_PATH}/\\1" _contents "${_contents}") + string(REPLACE "\${_IMPORT_PREFIX}/lib" "\${_IMPORT_PREFIX}/debug/lib" _contents "${_contents}") + string(REPLACE "\${_IMPORT_PREFIX}/bin" "\${_IMPORT_PREFIX}/debug/bin" _contents "${_contents}") + file(WRITE ${RELEASE_SHARE}/${DEBUG_TARGET_REL} "${_contents}") + + file(REMOVE ${DEBUG_TARGET}) + endforeach() + endif() + + #Fix ${_IMPORT_PREFIX} in cmake generated targets and configs; + #Since those can be renamed we have to check in every *.cmake + file(GLOB_RECURSE MAIN_CMAKES "${RELEASE_SHARE}/*.cmake") + + foreach(MAIN_CMAKE IN LISTS MAIN_CMAKES) + file(READ ${MAIN_CMAKE} _contents) + #This correction is not correct for all cases. To make it correct for all cases it needs to consider + #original folder deepness to CURRENT_PACKAGES_DIR in comparison to the moved to folder deepness which + #is always at least (>=) 2, e.g. share/${PORT}. Currently the code assumes it is always 2 although + #this requirement is only true for the *Config.cmake. The targets are not required to be in the same + #folder as the *Config.cmake! + if(NOT arg_NO_PREFIX_CORRECTION) + string(REGEX REPLACE + "get_filename_component\\(_IMPORT_PREFIX \"\\\${CMAKE_CURRENT_LIST_FILE}\" PATH\\)(\nget_filename_component\\(_IMPORT_PREFIX \"\\\${_IMPORT_PREFIX}\" PATH\\))*" + "get_filename_component(_IMPORT_PREFIX \"\${CMAKE_CURRENT_LIST_FILE}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)\nget_filename_component(_IMPORT_PREFIX \"\${_IMPORT_PREFIX}\" PATH)" + _contents "${_contents}") # see #1044 for details why this replacement is necessary. See #4782 why it must be a regex. + string(REGEX REPLACE + "get_filename_component\\(PACKAGE_PREFIX_DIR \"\\\${CMAKE_CURRENT_LIST_DIR}/\\.\\./(\\.\\./)*\" ABSOLUTE\\)" + "get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/../../\" ABSOLUTE)" + _contents "${_contents}") + string(REGEX REPLACE + "get_filename_component\\(PACKAGE_PREFIX_DIR \"\\\${CMAKE_CURRENT_LIST_DIR}/\\.\\.((\\\\|/)\\.\\.)*\" ABSOLUTE\\)" + "get_filename_component(PACKAGE_PREFIX_DIR \"\${CMAKE_CURRENT_LIST_DIR}/../../\" ABSOLUTE)" + _contents "${_contents}") # This is a meson-related workaround, see https://github.com/mesonbuild/meson/issues/6955 + endif() + + #Fix wrongly absolute paths to install dir with the correct dir using ${_IMPORT_PREFIX} + #This happens if vcpkg built libraries are directly linked to a target instead of using + #an imported target for it. We could add more logic here to identify defect target files. + #Since the replacement here in a multi config build always requires a generator expression + #in front of the absoulte path to ${CURRENT_INSTALLED_DIR}. So the match should always be at + #least >:${CURRENT_INSTALLED_DIR}. + #In general the following generator expressions should be there: + #\$<\$<CONFIG:DEBUG>:${CURRENT_INSTALLED_DIR}/debug/lib/somelib> + #and/or + #\$<\$<NOT:\$<CONFIG:DEBUG>>:${CURRENT_INSTALLED_DIR}/lib/somelib> + #with ${CURRENT_INSTALLED_DIR} being fully expanded + string(REPLACE "${CURRENT_INSTALLED_DIR}" [[${_IMPORT_PREFIX}]] _contents "${_contents}") + file(WRITE ${MAIN_CMAKE} "${_contents}") + endforeach() + + # Remove /debug/<target_path>/ if it's empty. + file(GLOB_RECURSE REMAINING_FILES "${DEBUG_SHARE}/*") + if(NOT REMAINING_FILES) + file(REMOVE_RECURSE ${DEBUG_SHARE}) + endif() + + # Remove /debug/share/ if it's empty. + file(GLOB_RECURSE REMAINING_FILES "${CURRENT_PACKAGES_DIR}/debug/share/*") + if(NOT REMAINING_FILES) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/share) + endif() + + # Patch out any remaining absolute references + file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CMAKE_CURRENT_PACKAGES_DIR) + file(GLOB CMAKE_FILES ${RELEASE_SHARE}/*.cmake) + foreach(CMAKE_FILE IN LISTS CMAKE_FILES) + file(READ ${CMAKE_FILE} _contents) + string(REPLACE "${CMAKE_CURRENT_PACKAGES_DIR}" "\${CMAKE_CURRENT_LIST_DIR}/../.." _contents "${_contents}") + file(WRITE ${CMAKE_FILE} "${_contents}") + endforeach() +endfunction() + + diff --git a/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake b/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake new file mode 100644 index 0000000..300b6a8 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_fixup_pkgconfig.cmake @@ -0,0 +1,207 @@ +function(z_vcpkg_fixup_pkgconfig_process_data arg_variable arg_config arg_prefix) + # This normalizes all data to start and to end with a newline, and + # to use LF instead of CRLF. This allows to use simpler regex matches. + string(REPLACE "\r\n" "\n" contents "\n${${arg_variable}}\n") + + # We use ${pcfiledir} for relocatable pc files, and on windows, + # pkgconf initializes ${pc_sysrootdir} to invalid '/'. + string(REPLACE [[${pc_sysrootdir}]] "" contents "${contents}") + + string(REPLACE "${CURRENT_PACKAGES_DIR}" [[${prefix}]] contents "${contents}") + string(REPLACE "${CURRENT_INSTALLED_DIR}" [[${prefix}]] contents "${contents}") + if(VCPKG_HOST_IS_WINDOWS) + string(REGEX REPLACE "^([a-zA-Z]):/" [[/\1/]] unix_packages_dir "${CURRENT_PACKAGES_DIR}") + string(REPLACE "${unix_packages_dir}" [[${prefix}]] contents "${contents}") + string(REGEX REPLACE "^([a-zA-Z]):/" [[/\1/]] unix_installed_dir "${CURRENT_INSTALLED_DIR}") + string(REPLACE "${unix_installed_dir}" [[${prefix}]] contents "${contents}") + endif() + + string(REGEX REPLACE "\n[\t ]*prefix[\t ]*=[^\n]*" "" contents "prefix=${arg_prefix}${contents}") + if("${arg_config}" STREQUAL "DEBUG") + # prefix points at the debug subfolder + string(REPLACE [[${prefix}/debug]] [[${prefix}]] contents "${contents}") + string(REPLACE [[${prefix}/include]] [[${prefix}/../include]] contents "${contents}") + string(REPLACE [[${prefix}/share]] [[${prefix}/../share]] contents "${contents}") + endif() + # Remove line continuations before transformations + string(REGEX REPLACE "[ \t]*\\\\\n[ \t]*" " " contents "${contents}") + # This section fuses XYZ.private and XYZ according to VCPKG_LIBRARY_LINKAGE + # + # Pkgconfig searches Requires.private transitively for Cflags in the dynamic case, + # which prevents us from removing it. + # + # Once this transformation is complete, users of vcpkg should never need to pass + # --static. + if("${VCPKG_LIBRARY_LINKAGE}" STREQUAL "static") + # how this works: + # we want to transform: + # Libs: $1 + # Libs.private: $2 + # into + # Libs: $1 $2 + # and the same thing for Requires and Requires.private + + foreach(item IN ITEMS "Libs" "Requires" "Cflags") + set(line "") + if("${contents}" MATCHES "\n${item}: *([^\n]*)") + string(APPEND line " ${CMAKE_MATCH_1}") + endif() + if("${contents}" MATCHES "\n${item}\\.private: *([^\n]*)") + string(APPEND line " ${CMAKE_MATCH_1}") + endif() + + string(REGEX REPLACE "\n${item}(\\.private)?:[^\n]*" "" contents "${contents}") + if(NOT "${line}" STREQUAL "") + string(APPEND contents "${item}:${line}\n") + endif() + endforeach() + endif() + + if(contents MATCHES "\nLibs: *([^\n]*)") + set(libs "${CMAKE_MATCH_1}") + if(libs MATCHES [[;]]) + # Assuming that ';' comes from CMake lists only. Candidate for parameter control. + string(REPLACE ";" " " no_lists "${libs}") + string(REPLACE "${libs}" "${no_lists}" contents "${contents}") + set(libs "${no_lists}") + endif() + + separate_arguments(libs_list UNIX_COMMAND "${libs}") + set(skip_next 0) + set(libs_filtered "") + foreach(item IN LISTS libs_list) + if(skip_next) + set(skip_next 0) + continue() + elseif(item MATCHES "^(-l|-L)?optimized\$") + string(COMPARE EQUAL "${arg_config}" "DEBUG" skip_next) + continue() + elseif(item MATCHES "^(-l|-L)?debug\$") + string(COMPARE EQUAL "${arg_config}" "RELEASE" skip_next) + continue() + elseif(item MATCHES "^(-l|-L)?general\$") + continue() + endif() + if(item MATCHES [[.[\$]| ]] AND NOT item MATCHES [["]]) + set(item "\"${item}\"") + else() + set(quoted "\"${item}\"") + string(FIND " ${libs} " " ${quoted} " index) + if(NOT index STREQUAL "-1") + set(item "${quoted}") + endif() + endif() + list(APPEND libs_filtered "${item}") + endforeach() + list(JOIN libs_filtered " " libs_filtered) + string(REPLACE "${libs}" "${libs_filtered}" contents "${contents}") + set(libs "${libs_filtered}") + + if(libs MATCHES "[^ ]*-NOTFOUND") + message(WARNING "Error in ${file}: 'Libs' refers to a missing lib:\n...${CMAKE_MATCH_0}") + endif() + if(libs MATCHES "[^\n]*::[^\n ]*") + message(WARNING "Error in ${file}: 'Libs' refers to a CMake target:\n...${CMAKE_MATCH_0}") + endif() + endif() + + # Quote -L, -I, and -l paths starting with `${blah}` + # This was already handled for "Libs", but there might be additional occurrences in other lines. + string(REGEX REPLACE "([ =])(-[LIl]\\\${[^}]*}[^ ;\n\t]*)" [[\1"\2"]] contents "${contents}") + + set("${arg_variable}" "${contents}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_fixup_pkgconfig_check_files arg_file arg_config) + set(path_suffix_DEBUG /debug) + set(path_suffix_RELEASE "") + + z_vcpkg_setup_pkgconfig_path(CONFIG "${arg_config}") + + # First make sure everything is ok with the package and its deps + cmake_path(GET arg_file STEM LAST_ONLY package_name) + debug_message("Checking package (${arg_config}): ${package_name}") + execute_process( + COMMAND "${PKGCONFIG}" --print-errors --exists "${package_name}" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + RESULT_VARIABLE error_var + OUTPUT_VARIABLE output + ERROR_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + ERROR_STRIP_TRAILING_WHITESPACE + ) + if(NOT "${error_var}" EQUAL "0") + message(FATAL_ERROR "${PKGCONFIG} --exists ${package_name} failed with error code: ${error_var} + ENV{PKG_CONFIG_PATH}: \"$ENV{PKG_CONFIG_PATH}\" + output: ${output}" + ) + else() + debug_message("pkg-config --exists ${package_name} output: ${output}") + endif() + + z_vcpkg_restore_pkgconfig_path() +endfunction() + +function(vcpkg_fixup_pkgconfig) + cmake_parse_arguments(PARSE_ARGV 0 arg + "SKIP_CHECK" + "" + "RELEASE_FILES;DEBUG_FILES;SYSTEM_LIBRARIES;SYSTEM_PACKAGES;IGNORE_FLAGS" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(DEFINED arg_RELEASE_FILES AND NOT DEFINED arg_DEBUG_FILES) + message(FATAL_ERROR "DEBUG_FILES must be specified if RELEASE_FILES was specified.") + endif() + if(NOT DEFINED arg_RELEASE_FILES AND DEFINED arg_DEBUG_FILES) + message(FATAL_ERROR "RELEASE_FILES must be specified if DEBUG_FILES was specified.") + endif() + + if(NOT DEFINED arg_RELEASE_FILES) + file(GLOB_RECURSE arg_RELEASE_FILES "${CURRENT_PACKAGES_DIR}/**/*.pc") + file(GLOB_RECURSE arg_DEBUG_FILES "${CURRENT_PACKAGES_DIR}/debug/**/*.pc") + foreach(debug_file IN LISTS arg_DEBUG_FILES) + vcpkg_list(REMOVE_ITEM arg_RELEASE_FILES "${debug_file}") + endforeach() + endif() + + foreach(config IN ITEMS RELEASE DEBUG) + debug_message("${config} Files: ${arg_${config}_FILES}") + if("${VCPKG_BUILD_TYPE}" STREQUAL "release" AND "${config}" STREQUAL "DEBUG") + continue() + endif() + foreach(file IN LISTS "arg_${config}_FILES") + message(STATUS "Fixing pkgconfig file: ${file}") + cmake_path(GET file PARENT_PATH pkg_lib_search_path) + if("${config}" STREQUAL "DEBUG") + set(relative_pc_path "${CURRENT_PACKAGES_DIR}/debug") + cmake_path(RELATIVE_PATH relative_pc_path BASE_DIRECTORY "${pkg_lib_search_path}") + else() + set(relative_pc_path "${CURRENT_PACKAGES_DIR}") + cmake_path(RELATIVE_PATH relative_pc_path BASE_DIRECTORY "${pkg_lib_search_path}") + endif() + #Correct *.pc file + file(READ "${file}" contents) + z_vcpkg_fixup_pkgconfig_process_data(contents "${config}" "\${pcfiledir}/${relative_pc_path}") + file(WRITE "${file}" "${contents}") + endforeach() + + if(NOT arg_SKIP_CHECK) # The check can only run after all files have been corrected! + vcpkg_find_acquire_program(PKGCONFIG) + debug_message("Using pkg-config from: ${PKGCONFIG}") + foreach(file IN LISTS "arg_${config}_FILES") + z_vcpkg_fixup_pkgconfig_check_files("${file}" "${config}") + endforeach() + endif() + endforeach() + debug_message("Fixing pkgconfig --- finished") + + set(Z_VCPKG_FIXUP_PKGCONFIG_CALLED TRUE CACHE INTERNAL "See below" FORCE) + # Variable to check if this function has been called! + # Theoreotically vcpkg could look for *.pc files and automatically call this function + # or check if this function has been called if *.pc files are detected. + # The same is true for vcpkg_fixup_cmake_targets +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake b/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake new file mode 100644 index 0000000..2cd9c99 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_from_bitbucket.cmake @@ -0,0 +1,93 @@ +function(vcpkg_from_bitbucket) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "" + "OUT_SOURCE_PATH;REPO;REF;SHA512;HEAD_REF" + "PATCHES") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_from_bitbucket was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(DEFINED arg_REF AND NOT DEFINED arg_SHA512) + message(FATAL_ERROR "SHA512 must be specified if REF is specified.") + endif() + if(NOT DEFINED arg_REF AND DEFINED arg_SHA512) + message(FATAL_ERROR "REF must be specified if SHA512 is specified.") + endif() + + if(NOT DEFINED arg_OUT_SOURCE_PATH) + message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.") + endif() + if(NOT DEFINED arg_REPO) + message(FATAL_ERROR "The Bitbucket repository must be specified.") + endif() + + if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF) + message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.") + endif() + + if(NOT arg_REPO MATCHES "^([^/]*)/([^/]*)$") + message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name: + must be an organization name followed by a repository name separated by a single slash.") + endif() + set(org_name "${CMAKE_MATCH_1}") + set(repo_name "${CMAKE_MATCH_2}") + + set(redownload_param "") + set(working_directory_param "") + set(sha512_param "SHA512" "${arg_SHA512}") + set(ref_to_use "${arg_REF}") + if(VCPKG_USE_HEAD_VERSION) + if(DEFINED arg_HEAD_REF) + set(redownload_param "ALWAYS_REDOWNLOAD") + set(sha512_param "SKIP_SHA512") + set(working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head") + set(ref_to_use "${arg_HEAD_REF}") + else() + message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.") + endif() + elseif(NOT DEFINED arg_REF) + message(FATAL_ERROR "Package does not specify REF. It must be built using --head.") + endif() + + # avoid using either - or _, to allow both `foo/bar` and `foo-bar` to coexist + # we assume that no one will name a ref "foo_-bar" + string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}") + set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}.tar.gz") + + # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build. + if(VCPKG_USE_HEAD_VERSION) + vcpkg_download_distfile(archive_version + URLS "https://api.bitbucket.com/2.0/repositories/${org_name}/${repo_name}/refs/branches/${arg_HEAD_REF}" + FILENAME "${downloaded_file_name}.version" + SKIP_SHA512 + ALWAYS_REDOWNLOAD + ) + # Parse the github refs response with regex. + # TODO: add json-pointer support to vcpkg + file(READ "${archive_version}" version_contents) + if(NOT version_contents MATCHES [["hash": "([a-f0-9]+)"]]) + message(FATAL_ERROR "Failed to parse API response from '${version_url}': + +${version_contents} +") + endif() + set(VCPKG_HEAD_VERSION "${CMAKE_MATCH_1}" PARENT_SCOPE) + endif() + + # download the file information from bitbucket. + vcpkg_download_distfile(archive + URLS "https://bitbucket.com/${org_name}/${repo_name}/get/${ref_to_use}.tar.gz" + FILENAME "${downloaded_file_name}" + ${sha512_param} + ${redownload_param} + ) + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${archive}" + REF "${sanitized_ref}" + PATCHES ${arg_PATCHES} + ${working_directory_param} + ) + set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_from_git.cmake b/vcpkg/scripts/cmake/vcpkg_from_git.cmake new file mode 100644 index 0000000..0b477ac --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_from_git.cmake @@ -0,0 +1,189 @@ +function(vcpkg_from_git) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "" + "OUT_SOURCE_PATH;URL;REF;FETCH_REF;HEAD_REF;TAG;LFS" + "PATCHES" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_from_git was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(DEFINED arg_TAG) + message(WARNING "The TAG argument to vcpkg_from_git has been deprecated and has no effect.") + endif() + + if(NOT DEFINED arg_OUT_SOURCE_PATH) + message(FATAL_ERROR "OUT_SOURCE_PATH must be specified") + endif() + if(NOT DEFINED arg_URL) + message(FATAL_ERROR "URL must be specified") + endif() + if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF) + message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified") + endif() + if(DEFINED arg_FETCH_REF AND NOT DEFINED arg_REF) + message(FATAL_ERROR "REF must be specified if FETCH_REF is specified") + endif() + if(NOT DEFINED arg_LFS AND "LFS" IN_LIST arg_KEYWORDS_MISSING_VALUES) + set(arg_LFS "${arg_URL}") + endif() + + vcpkg_list(SET git_fetch_shallow_param --depth 1) + vcpkg_list(SET extract_working_directory_param) + vcpkg_list(SET skip_patch_check_param) + set(git_working_directory "${DOWNLOADS}/git-tmp") + set(do_download OFF) + + if(VCPKG_USE_HEAD_VERSION AND DEFINED arg_HEAD_REF) + vcpkg_list(SET working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head") + vcpkg_list(SET git_fetch_shallow_param --depth 1) + vcpkg_list(SET skip_patch_check_param SKIP_PATCH_CHECK) + set(ref_to_fetch "${arg_HEAD_REF}") + set(git_working_directory "${CURRENT_BUILDTREES_DIR}/src/git-tmp") + string(REPLACE "/" "_-" sanitized_ref "${arg_HEAD_REF}") + + if(NOT _VCPKG_NO_DOWNLOADS) + set(do_download ON) + endif() + else() + if(NOT DEFINED arg_REF) + message(FATAL_ERROR "Package does not specify REF. It must be built using --head.") + endif() + if(VCPKG_USE_HEAD_VERSION) + message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.") + endif() + + if(DEFINED arg_FETCH_REF) + set(ref_to_fetch "${arg_FETCH_REF}") + vcpkg_list(SET git_fetch_shallow_param) + else() + set(ref_to_fetch "${arg_REF}") + endif() + string(REPLACE "/" "_-" sanitized_ref "${arg_REF}") + endif() + + set(temp_archive "${DOWNLOADS}/temp/${PORT}-${sanitized_ref}.tar.gz") + set(archive "${DOWNLOADS}/${PORT}-${sanitized_ref}.tar.gz") + + if(NOT EXISTS "${archive}") + if(_VCPKG_NO_DOWNLOADS) + message(FATAL_ERROR "Downloads are disabled, but '${archive}' does not exist.") + endif() + set(do_download ON) + endif() + + if(do_download) + message(STATUS "Fetching ${arg_URL} ${ref_to_fetch}...") + find_program(GIT NAMES git git.cmd) + file(MAKE_DIRECTORY "${DOWNLOADS}") + # Note: git init is safe to run multiple times + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${GIT}" init "${git_working_directory}" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "git-init-${TARGET_TRIPLET}" + ) + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${GIT}" fetch "${arg_URL}" "${ref_to_fetch}" ${git_fetch_shallow_param} -n + WORKING_DIRECTORY "${git_working_directory}" + LOGNAME "git-fetch-${TARGET_TRIPLET}" + ) + if(arg_LFS) + # Running "git lfs" searches for "git-lfs[.exe]" on the path + vcpkg_execute_in_download_mode( + COMMAND "${GIT}" lfs --version + OUTPUT_VARIABLE lfs_version_output + ERROR_VARIABLE lfs_version_error + RESULT_VARIABLE lfs_version_result + WORKING_DIRECTORY "${git_working_directory}" + ) + if(lfs_version_result) + message(FATAL_ERROR "Git LFS is required for ${PORT}") + endif() + + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${GIT}" lfs install --local --force + WORKING_DIRECTORY "${git_working_directory}" + LOGNAME "git-lfs-install-${TARGET_TRIPLET}" + ) + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${GIT}" lfs fetch "${arg_LFS}" "${ref_to_fetch}" + WORKING_DIRECTORY "${git_working_directory}" + LOGNAME "git-lfs-fetch-${TARGET_TRIPLET}" + ) + endif() + + if(VCPKG_USE_HEAD_VERSION) + set(expected_rev_parse FETCH_HEAD) + else() + set(expected_rev_parse "${arg_REF}") + endif() + + vcpkg_execute_in_download_mode( + COMMAND "${GIT}" rev-parse "${expected_rev_parse}" + OUTPUT_VARIABLE rev_parse_ref + ERROR_VARIABLE rev_parse_ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_working_directory}" + ) + + if(error_code) + if(VCPKG_USE_HEAD_VERSION) + message(FATAL_ERROR "Unable to determine the commit SHA of the HEAD version to use after \ +fetching ${ref_to_fetch} from the git repository. (git rev-parse ${expected_rev_parse} failed)") + elseif(DEFINED arg_FETCH_REF) + message(FATAL_ERROR "After fetching ${ref_to_fetch}, the target ref ${expected_rev_parse} appears \ +inaccessible. A common cause of this failure is setting REF to a named branch or tag rather than a commit SHA. REF \ +must be a commit SHA. (git rev-parse ${expected_rev_parse} failed)") + else() + message(FATAL_ERROR "After fetching ${ref_to_fetch}, the target ref ${expected_rev_parse} appears \ +inaccessible. A common cause of this failure is setting REF to a named branch or tag rather than a commit SHA. REF \ +must be a commit SHA. If the git server does not advertise commit SHAs \ +(uploadpack.allowReachableSHA1InWant is false), you can set FETCH_REF to a named branch in which the desired commit \ +SHA is in the history. For example, you may be able to fix this error by changing \"REF ${arg_REF}\" to \ +\"REF a-commit-sha FETCH_REF ${arg_REF}\". (git rev-parse ${expected_rev_parse} failed)") + endif() + endif() + + string(STRIP "${rev_parse_ref}" rev_parse_ref) + if(VCPKG_USE_HEAD_VERSION) + set(VCPKG_HEAD_VERSION "${rev_parse_ref}" PARENT_SCOPE) + elseif(NOT "${rev_parse_ref}" STREQUAL "${arg_REF}") + message(FATAL_ERROR "After fetching ${ref_to_fetch}, the requested REF (${arg_REF}) does not match \ +its commit SHA returned by git rev-parse (${rev_parse_ref}). This is usually caused by trying to set REF to a named \ +branch or tag rather than a commit SHA. REF must be a commit SHA. If the git server does not advertise commit SHAs \ +(uploadpack.allowReachableSHA1InWant is false), you can set FETCH_REF to a named branch in which the desired commit \ +SHA is in the history. For example, you may be able to fix this error by changing \"REF ${arg_REF}\" to \ +\"REF a-commit-sha FETCH_REF ${arg_REF}\". + [Expected : ( ${arg_REF} )]) + [ Actual : ( ${rev_parse_ref} )]" + ) + endif() + + file(MAKE_DIRECTORY "${DOWNLOADS}/temp") + vcpkg_execute_required_process( + ALLOW_IN_DOWNLOAD_MODE + COMMAND "${GIT}" -c core.autocrlf=false archive "${rev_parse_ref}" -o "${temp_archive}" + WORKING_DIRECTORY "${git_working_directory}" + LOGNAME git-archive + ) + file(RENAME "${temp_archive}" "${archive}") + else() + message(STATUS "Using cached ${archive}") + endif() + + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${archive}" + REF "${sanitized_ref}" + PATCHES ${arg_PATCHES} + NO_REMOVE_ONE_LEVEL + ${extract_working_directory_param} + ${skip_patch_check_param} + ) + + set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_from_github.cmake b/vcpkg/scripts/cmake/vcpkg_from_github.cmake new file mode 100644 index 0000000..5e5c2c1 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_from_github.cmake @@ -0,0 +1,136 @@ +function(vcpkg_from_github) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "USE_TARBALL_API" + "OUT_SOURCE_PATH;REPO;REF;SHA512;HEAD_REF;GITHUB_HOST;AUTHORIZATION_TOKEN;FILE_DISAMBIGUATOR" + "PATCHES") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_from_github was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(DEFINED arg_REF AND NOT DEFINED arg_SHA512) + message(FATAL_ERROR "SHA512 must be specified if REF is specified.") + endif() + if(NOT DEFINED arg_REF AND DEFINED arg_SHA512) + message(FATAL_ERROR "REF must be specified if SHA512 is specified.") + endif() + + if(NOT DEFINED arg_OUT_SOURCE_PATH) + message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.") + endif() + if(NOT DEFINED arg_REPO) + message(FATAL_ERROR "The GitHub repository must be specified.") + endif() + + if(NOT DEFINED arg_GITHUB_HOST) + set(github_host "https://github.com") + set(github_api_url "https://api.github.com") + else() + set(github_host "${arg_GITHUB_HOST}") + set(github_api_url "${arg_GITHUB_HOST}/api/v3") + endif() + + set(headers_param "") + if(DEFINED arg_AUTHORIZATION_TOKEN) + set(headers_param "HEADERS" "Authorization: token ${arg_AUTHORIZATION_TOKEN}") + endif() + + + if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF) + message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.") + endif() + + if(NOT arg_REPO MATCHES "^([^/]*)/([^/]*)$") + message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name: + must be an organization name followed by a repository name separated by a single slash.") + endif() + set(org_name "${CMAKE_MATCH_1}") + set(repo_name "${CMAKE_MATCH_2}") + + if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED arg_HEAD_REF) + message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.") + set(VCPKG_USE_HEAD_VERSION OFF) + elseif(NOT VCPKG_USE_HEAD_VERSION AND NOT DEFINED arg_REF) + message(FATAL_ERROR "Package does not specify REF. It must be built using --head.") + endif() + + # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build. + if(VCPKG_USE_HEAD_VERSION) + string(REPLACE "/" "_-" sanitized_head_ref "${arg_HEAD_REF}") + vcpkg_download_distfile(archive_version + URLS "${github_api_url}/repos/${org_name}/${repo_name}/git/refs/heads/${arg_HEAD_REF}" + FILENAME "${org_name}-${repo_name}-${sanitized_head_ref}.version" + ${headers_param} + SKIP_SHA512 + ALWAYS_REDOWNLOAD + ) + # Parse the github refs response with regex. + file(READ "${archive_version}" version_contents) + string(JSON head_version + ERROR_VARIABLE head_version_err + GET "${version_contents}" + "object" + "sha" + ) + if(NOT "${head_version_err}" STREQUAL "NOTFOUND") + message(FATAL_ERROR "Failed to parse API response from '${version_url}': +${version_contents} + +Error was: ${head_version_err} +") + endif() + + set(VCPKG_HEAD_VERSION "${head_version}" PARENT_SCOPE) + set(ref_to_use "${head_version}") + + vcpkg_list(SET redownload_param ALWAYS_REDOWNLOAD) + vcpkg_list(SET sha512_param SKIP_SHA512) + vcpkg_list(SET working_directory_param WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/src/head") + vcpkg_list(SET skip_patch_check_param SKIP_PATCH_CHECK) + else() + set(ref_to_use "${arg_REF}") + + vcpkg_list(SET redownload_param) + vcpkg_list(SET working_directory_param) + vcpkg_list(SET skip_patch_check_param) + vcpkg_list(SET sha512_param SHA512 "${arg_SHA512}") + endif() + + string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}") + if(DEFINED arg_FILE_DISAMBIGUATOR AND NOT VCPKG_USE_HEAD_REF) + set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}-${arg_FILE_DISAMBIGUATOR}.tar.gz") + else() + set(downloaded_file_name "${org_name}-${repo_name}-${sanitized_ref}.tar.gz") + endif() + + if(arg_USE_TARBALL_API) + # This alternative endpoint has a better support for GitHub's personal + # access tokens (for instance when there is SSO enabled within the + # organization). + set(download_url + "${github_api_url}/repos/${org_name}/${repo_name}/tarball/${ref_to_use}" + ) + else() + set(download_url + "${github_host}/${org_name}/${repo_name}/archive/${ref_to_use}.tar.gz" + ) + endif() + + # Try to download the file information from github + vcpkg_download_distfile(archive + URLS "${download_url}" + FILENAME "${downloaded_file_name}" + ${headers_param} + ${sha512_param} + ${redownload_param} + ) + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${archive}" + REF "${sanitized_ref}" + PATCHES ${arg_PATCHES} + ${working_directory_param} + ${skip_patch_check_param} + ) + set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake b/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake new file mode 100644 index 0000000..93e8e60 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_from_gitlab.cmake @@ -0,0 +1,128 @@ +include(vcpkg_execute_in_download_mode) + +function(z_uri_encode input output_variable) + string(HEX "${input}" hex) + string(LENGTH "${hex}" length) + math(EXPR last "${length} - 1") + set(result "") + foreach(i RANGE ${last}) + math(EXPR even "${i} % 2") + if("${even}" STREQUAL "0") + string(SUBSTRING "${hex}" "${i}" 2 char) + string(APPEND result "%${char}") + endif() + endforeach() + set("${output_variable}" ${result} PARENT_SCOPE) +endfunction() + +function(vcpkg_from_gitlab) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "" + "OUT_SOURCE_PATH;GITLAB_URL;REPO;REF;SHA512;HEAD_REF;FILE_DISAMBIGUATOR;AUTHORIZATION_TOKEN" + "PATCHES") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_from_gitlab was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT DEFINED arg_GITLAB_URL) + message(FATAL_ERROR "GITLAB_URL must be specified.") + endif() + + if(DEFINED arg_REF AND NOT DEFINED arg_SHA512) + message(FATAL_ERROR "SHA512 must be specified if REF is specified.") + endif() + if(NOT DEFINED arg_REF AND DEFINED arg_SHA512) + message(FATAL_ERROR "REF must be specified if SHA512 is specified.") + endif() + + if(NOT DEFINED arg_OUT_SOURCE_PATH) + message(FATAL_ERROR "OUT_SOURCE_PATH must be specified.") + endif() + if(NOT DEFINED arg_REPO) + message(FATAL_ERROR "The GitHub repository must be specified.") + endif() + + set(headers_param "") + if(DEFINED arg_AUTHORIZATION_TOKEN) + set(headers_param "HEADERS" "PRIVATE-TOKEN: ${arg_AUTHORIZATION_TOKEN}") + endif() + + if(NOT DEFINED arg_REF AND NOT DEFINED arg_HEAD_REF) + message(FATAL_ERROR "At least one of REF or HEAD_REF must be specified.") + endif() + + if (NOT arg_REPO MATCHES [[^([^/;]+/)+([^/;]+)$]]) + message(FATAL_ERROR "REPO (${arg_REPO}) is not a valid repo name. It must be: + - an organization name followed by a repository name separated by a single slash, or + - an organization name, group name, subgroup names and repository name separated by slashes.") + endif() + set(gitlab_link "${arg_GITLAB_URL}/${arg_REPO}") + string(REPLACE "/" "-" downloaded_file_name_base "${arg_REPO}") + string(REPLACE "/" ";" repo_parts "${arg_REPO}") + list(GET repo_parts -1 repo_name) + + set(redownload_param "") + set(working_directory_param "") + set(sha512_param "SHA512" "${arg_SHA512}") + set(ref_to_use "${arg_REF}") + if(VCPKG_USE_HEAD_VERSION) + if(DEFINED arg_HEAD_REF) + set(redownload_param "ALWAYS_REDOWNLOAD") + set(sha512_param "SKIP_SHA512") + set(working_directory_param "WORKING_DIRECTORY" "${CURRENT_BUILDTREES_DIR}/src/head") + set(ref_to_use "${arg_HEAD_REF}") + else() + message(STATUS "Package does not specify HEAD_REF. Falling back to non-HEAD version.") + endif() + elseif(NOT DEFINED arg_REF) + message(FATAL_ERROR "Package does not specify REF. It must be built using --head.") + endif() + + # avoid using either - or _, to allow both `foo/bar` and `foo-bar` to coexist + # we assume that no one will name a ref "foo_-bar" + string(REPLACE "/" "_-" sanitized_ref "${ref_to_use}") + if(DEFINED arg_FILE_DISAMBIGUATOR AND NOT VCPKG_USE_HEAD_VERSION) + set(downloaded_file_name "${downloaded_file_name_base}-${sanitized_ref}-${arg_FILE_DISAMBIGUATOR}.tar.gz") + else() + set(downloaded_file_name "${downloaded_file_name_base}-${sanitized_ref}.tar.gz") + endif() + + + # exports VCPKG_HEAD_VERSION to the caller. This will get picked up by ports.cmake after the build. + # When multiple vcpkg_from_gitlab's are used after each other, only use the version from the first (hopefully the primary one). + if(VCPKG_USE_HEAD_VERSION AND NOT DEFINED VCPKG_HEAD_VERSION) + z_uri_encode("${arg_REPO}" encoded_repo_path) + set(version_url "${arg_GITLAB_URL}/api/v4/projects/${encoded_repo_path}/repository/branches/${arg_HEAD_REF}") + vcpkg_download_distfile(archive_version + URLS "${version_url}" + FILENAME "${downloaded_file_name}.version" + ${headers_param} + SKIP_SHA512 + ALWAYS_REDOWNLOAD + ) + # Parse the gitlab response with regex. + file(READ "${archive_version}" version_contents) + if(NOT version_contents MATCHES [["id":(\ *)"([a-f0-9]+)"]]) + message(FATAL_ERROR "Failed to parse API response from '${version_url}':\n${version_contents}\n") + endif() + set(VCPKG_HEAD_VERSION "${CMAKE_MATCH_2}" PARENT_SCOPE) + endif() + + # download the file information from gitlab + vcpkg_download_distfile(archive + URLS "${gitlab_link}/-/archive/${ref_to_use}/${repo_name}-${ref_to_use}.tar.gz" + FILENAME "${downloaded_file_name}" + ${headers_param} + ${sha512_param} + ${redownload_param} + ) + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${archive}" + REF "${sanitized_ref}" + PATCHES ${arg_PATCHES} + ${working_directory_param} + ) + set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake b/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake new file mode 100644 index 0000000..19772c3 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_from_sourceforge.cmake @@ -0,0 +1,46 @@ +function(vcpkg_from_sourceforge) + cmake_parse_arguments(PARSE_ARGV 0 "arg" + "DISABLE_SSL;NO_REMOVE_ONE_LEVEL" + "OUT_SOURCE_PATH;REPO;REF;SHA512;FILENAME;WORKING_DIRECTORY" + "PATCHES") + + foreach(arg_name IN ITEMS OUT_SOURCE_PATH SHA512 REPO FILENAME) + if(NOT DEFINED "arg_${arg_name}") + message(FATAL_ERROR "${arg_name} is required.") + endif() + endforeach() + + if(arg_DISABLE_SSL) + message(WARNING "DISABLE_SSL has been deprecated and has no effect") + endif() + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Unrecognized arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + vcpkg_download_sourceforge(ARCHIVE + REPO "${arg_REPO}" + REF "${arg_REF}" + SHA512 "${arg_SHA512}" + FILENAME "${arg_FILENAME}" + ) + + set(no_remove_one_level_param "") + if(arg_NO_REMOVE_ONE_LEVEL) + set(no_remove_one_level_param "NO_REMOVE_ONE_LEVEL") + endif() + set(working_directory_param "") + if(DEFINED arg_WORKING_DIRECTORY) + set(working_directory_param "WORKING_DIRECTORY" "${arg_WORKING_DIRECTORY}") + endif() + vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${ARCHIVE}" + REF "${sanitized_ref}" + ${no_remove_one_level_param} + ${working_directory_param} + PATCHES ${arg_PATCHES} + ) + + set("${arg_OUT_SOURCE_PATH}" "${SOURCE_PATH}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake b/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake new file mode 100644 index 0000000..b24b4d0 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_get_program_files_platform_bitness.cmake @@ -0,0 +1,7 @@ +function(vcpkg_get_program_files_platform_bitness out_var) + if(DEFINED ENV{ProgramW6432}) + set("${out_var}" "$ENV{ProgramW6432}" PARENT_SCOPE) + else() + set("${out_var}" "$ENV{PROGRAMFILES}" PARENT_SCOPE) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake b/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake new file mode 100644 index 0000000..4c58d07 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_get_windows_sdk.cmake @@ -0,0 +1,7 @@ +function(vcpkg_get_windows_sdk out_var) + if("$ENV{WindowsSDKVersion}" MATCHES [[^([0-9.]*)(\\|/)?$]]) + set("${out_var}" "${CMAKE_MATCH_1}" PARENT_SCOPE) + else() + message(FATAL_ERROR "Unexpected format for ENV{WindowsSDKVersion} ($ENV{WindowsSDKVersion})") + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake b/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake new file mode 100644 index 0000000..9b245ff --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_host_path_list.cmake @@ -0,0 +1,64 @@ +function(vcpkg_host_path_list)
+ if("${ARGC}" LESS "2")
+ message(FATAL_ERROR "vcpkg_host_path_list requires at least two arguments.")
+ endif()
+
+ if("${ARGV1}" MATCHES "^ARGV([0-9]*)$|^ARG[CN]$|^CMAKE_CURRENT_FUNCTION|^CMAKE_MATCH_")
+ message(FATAL_ERROR "vcpkg_host_path_list does not support the list_var being ${ARGV1}.
+ Please use a different variable name.")
+ endif()
+
+ if("${ARGV1}" MATCHES [[^ENV\{(.*)\}$]])
+ set(list "$ENV{${CMAKE_MATCH_1}}")
+ set(env_var ON)
+ elseif("${ARGV1}" MATCHES [[^([A-Z]+)\{.*\}$]])
+ message(FATAL_ERROR "vcpkg_host_path_list does not support ${CMAKE_MATCH_1} variables;
+ only ENV{} and regular variables are supported.")
+ else()
+ set(list "${${ARGV1}}")
+ set(env_var OFF)
+ endif()
+ set(operation "${ARGV0}")
+ set(list_var "${ARGV1}")
+
+ cmake_parse_arguments(PARSE_ARGV 2 arg "" "" "")
+ set(bad_items "${arg_UNPARSED_ARGUMENTS}")
+ list(FILTER bad_items INCLUDE REGEX "[${VCPKG_HOST_PATH_SEPARATOR}]")
+ if(NOT "${bad_items}" STREQUAL "")
+ message(FATAL_ERROR "Host path separator (${VCPKG_HOST_PATH_SEPARATOR}) in path; this is unsupported.")
+ endif()
+
+ if("${operation}" STREQUAL "SET")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ set(list "${arguments}")
+ elseif("${operation}" STREQUAL "APPEND")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ if("${list}" STREQUAL "")
+ set(list "${arguments}")
+ elseif(NOT "${arguments}" STREQUAL "")
+ set(list "${list}${VCPKG_HOST_PATH_SEPARATOR}${arguments}")
+ endif()
+ elseif("${operation}" STREQUAL "PREPEND")
+ cmake_path(CONVERT "${arg_UNPARSED_ARGUMENTS}" TO_NATIVE_PATH_LIST arguments)
+ if("${list}" STREQUAL "")
+ set(list "${arguments}")
+ elseif(NOT "${arguments}" STREQUAL "")
+ set(list "${arguments}${VCPKG_HOST_PATH_SEPARATOR}${list}")
+ endif()
+ elseif("${operation}" STREQUAL "REMOVE_DUPLICATES")
+ if(NOT VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+ string(REPLACE [[;]] [[\\\;]] list "${list}")
+ endif()
+ cmake_path(CONVERT "${list}" TO_CMAKE_PATH_LIST current_list)
+ list(REMOVE_DUPLICATES current_list)
+ cmake_path(CONVERT "${current_list}" TO_NATIVE_PATH_LIST list)
+ else()
+ message(FATAL_ERROR "Operation ${operation} not recognized.")
+ endif()
+
+ if(env_var)
+ set("${list_var}" "${list}")
+ else()
+ set("${list_var}" "${list}" PARENT_SCOPE)
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake new file mode 100644 index 0000000..df7d7bf --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_cmake.cmake @@ -0,0 +1,23 @@ +function(vcpkg_install_cmake) + if(Z_VCPKG_CMAKE_INSTALL_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-cmake; using both vcpkg-cmake and vcpkg_install_cmake in the same port is unsupported.") + endif() + + cmake_parse_arguments(PARSE_ARGV 0 "arg" "DISABLE_PARALLEL;ADD_BIN_TO_PATH" "" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "vcpkg_cmake_install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + vcpkg_list(SET params) + foreach(arg IN ITEMS DISABLE_PARALLEL ADD_BIN_TO_PATH) + if(arg_${arg}) + vcpkg_list(APPEND params "${arg}") + endif() + endforeach() + + vcpkg_build_cmake(Z_VCPKG_DISABLE_DEPRECATION MESSAGE + ${params} + LOGFILE_ROOT install + TARGET install + ) +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake b/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake new file mode 100644 index 0000000..061eba5 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_copyright.cmake @@ -0,0 +1,42 @@ +function(vcpkg_install_copyright)
+ cmake_parse_arguments(PARSE_ARGV 0 arg "" "COMMENT" "FILE_LIST")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(NOT DEFINED arg_FILE_LIST)
+ message(FATAL_ERROR "FILE_LIST must be specified")
+ endif()
+
+ list(LENGTH arg_FILE_LIST FILE_LIST_LENGTH)
+ set(out_string "")
+
+ if(FILE_LIST_LENGTH LESS_EQUAL 0)
+ message(FATAL_ERROR "FILE_LIST must contain at least one file")
+ elseif(FILE_LIST_LENGTH EQUAL 1)
+ if(arg_COMMENT)
+ file(READ "${arg_FILE_LIST}" out_string)
+ else()
+ file(INSTALL "${arg_FILE_LIST}" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME copyright)
+ return()
+ endif()
+ else()
+ foreach(file_item IN LISTS arg_FILE_LIST)
+ if(NOT EXISTS "${file_item}")
+ message(FATAL_ERROR "\n${CMAKE_CURRENT_FUNCTION} was passed a non-existing path: ${file_item}\n")
+ endif()
+
+ get_filename_component(file_name "${file_item}" NAME)
+ file(READ "${file_item}" file_contents)
+
+ string(APPEND out_string "${file_name}:\n\n${file_contents}\n\n")
+ endforeach()
+ endif()
+
+ if(arg_COMMENT)
+ string(PREPEND out_string "${arg_COMMENT}\n\n")
+ endif()
+
+ file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "${out_string}")
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_gn.cmake b/vcpkg/scripts/cmake/vcpkg_install_gn.cmake new file mode 100644 index 0000000..5d96cbd --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_gn.cmake @@ -0,0 +1,118 @@ +function(z_vcpkg_install_gn_get_target_type out_var) + cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "SOURCE_PATH;BUILD_DIR;TARGET" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Internal error: get_target_type was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + execute_process( + COMMAND "${GN}" desc "${arg_BUILD_DIR}" "${arg_TARGET}" + WORKING_DIRECTORY "${arg_SOURCE_PATH}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(output MATCHES [[type: ([A-Za-z0-9_]+)]]) + set("${out_var}" "${CMAKE_MATCH_1}" PARENT_SCOPE) + else() + message(FATAL_ERROR "invalid result from `gn desc`: ${output}") + endif() +endfunction() + +function(z_vcpkg_install_gn_get_desc out_var) + cmake_parse_arguments(PARSE_ARGV 1 "arg" "" "SOURCE_PATH;BUILD_DIR;TARGET;WHAT_TO_DISPLAY" "") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Internal error: get_desc was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + execute_process( + COMMAND "${GN}" desc "${arg_BUILD_DIR}" "${arg_TARGET}" "${arg_WHAT_TO_DISPLAY}" + WORKING_DIRECTORY "${arg_SOURCE_PATH}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REPLACE ";" "\\;" output "${output}") + string(REGEX REPLACE "\n|(\r\n)" ";" output "${output}") + set("${out_var}" "${output}" PARENT_SCOPE) +endfunction() + +function(z_vcpkg_install_gn_install) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "SOURCE_PATH;BUILD_DIR;INSTALL_DIR" "TARGETS") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "Internal error: install was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + foreach(target IN LISTS arg_TARGETS) + # GN targets must start with a // + z_vcpkg_install_gn_get_desc(outputs + SOURCE_PATH "${arg_SOURCE_PATH}" + BUILD_DIR "${arg_BUILD_DIR}" + TARGET "//${target}" + WHAT_TO_DISPLAY outputs + ) + z_vcpkg_install_gn_get_target_type(target_type + SOURCE_PATH "${arg_SOURCE_PATH}" + BUILD_DIR "${arg_BUILD_DIR}" + TARGET "//${target}" + ) + + foreach(output IN LISTS outputs) + if(output MATCHES "^//") + # relative path (e.g. //out/Release/target.lib) + string(REGEX REPLACE "^//" "${arg_SOURCE_PATH}/" output "${output}") + elseif(output MATCHES "^/" AND CMAKE_HOST_WIN32) + # absolute path (e.g. /C:/path/to/target.lib) + string(REGEX REPLACE "^/" "" output "${output}") + endif() + + if(NOT EXISTS "${output}") + message(WARNING "Output for target `${target}` doesn't exist: ${output}.") + continue() + endif() + + if(target_type STREQUAL "executable") + file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/tools") + elseif(output MATCHES "(\\.dll|\\.pdb)$") + file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/bin") + else() + file(INSTALL "${output}" DESTINATION "${arg_INSTALL_DIR}/lib") + endif() + endforeach() + endforeach() +endfunction() + +function(vcpkg_install_gn) + if(Z_VCPKG_GN_INSTALL_GUARD) + message(FATAL_ERROR "The ${PORT} port already depends on vcpkg-gn; using both vcpkg-gn and vcpkg_install_gn in the same port is unsupported.") + else() + message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "This function 'vcpkg_install_gn' is obsolete. Use 'vcpkg_gn_install' in port 'vcpkg-gn'.") + endif() + + cmake_parse_arguments(PARSE_ARGV 0 arg "" "SOURCE_PATH" "TARGETS") + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_install_gn was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + if(NOT DEFINED arg_SOURCE_PATH) + message(FATAL_ERROR "SOURCE_PATH must be specified.") + endif() + + vcpkg_build_ninja(TARGETS ${arg_TARGETS}) + + vcpkg_find_acquire_program(GN) + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + z_vcpkg_install_gn_install( + SOURCE_PATH "${arg_SOURCE_PATH}" + BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" + INSTALL_DIR "${CURRENT_PACKAGES_DIR}/debug" + TARGETS ${arg_TARGETS} + ) + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + z_vcpkg_install_gn_install( + SOURCE_PATH "${arg_SOURCE_PATH}" + BUILD_DIR "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel" + INSTALL_DIR "${CURRENT_PACKAGES_DIR}" + TARGETS ${arg_TARGETS} + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_install_make.cmake b/vcpkg/scripts/cmake/vcpkg_install_make.cmake new file mode 100644 index 0000000..5fcd25e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_make.cmake @@ -0,0 +1,6 @@ +function(vcpkg_install_make)
+ vcpkg_build_make(
+ ${ARGN}
+ ENABLE_INSTALL
+ )
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_meson.cmake b/vcpkg/scripts/cmake/vcpkg_install_meson.cmake new file mode 100644 index 0000000..0351f27 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_meson.cmake @@ -0,0 +1,71 @@ +function(vcpkg_install_meson) + cmake_parse_arguments(PARSE_ARGV 0 arg "ADD_BIN_TO_PATH" "" "") + + vcpkg_find_acquire_program(NINJA) + unset(ENV{DESTDIR}) # installation directory was already specified with '--prefix' option + + if(VCPKG_TARGET_IS_OSX) + vcpkg_backup_env_variables(VARS SDKROOT MACOSX_DEPLOYMENT_TARGET) + set(ENV{SDKROOT} "${VCPKG_DETECTED_CMAKE_OSX_SYSROOT}") + set(ENV{MACOSX_DEPLOYMENT_TARGET} "${VCPKG_DETECTED_CMAKE_OSX_DEPLOYMENT_TARGET}") + endif() + + foreach(buildtype IN ITEMS "debug" "release") + if(DEFINED VCPKG_BUILD_TYPE AND NOT VCPKG_BUILD_TYPE STREQUAL buildtype) + continue() + endif() + + if(buildtype STREQUAL "debug") + set(short_buildtype "dbg") + else() + set(short_buildtype "rel") + endif() + + message(STATUS "Package ${TARGET_TRIPLET}-${short_buildtype}") + if(arg_ADD_BIN_TO_PATH) + vcpkg_backup_env_variables(VARS PATH) + if(buildtype STREQUAL "debug") + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/debug/bin") + else() + vcpkg_add_to_path(PREPEND "${CURRENT_INSTALLED_DIR}/bin") + endif() + endif() + vcpkg_execute_required_process( + COMMAND "${NINJA}" install -v + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${short_buildtype}" + LOGNAME package-${TARGET_TRIPLET}-${short_buildtype} + ) + if(arg_ADD_BIN_TO_PATH) + vcpkg_restore_env_variables(VARS PATH) + endif() + endforeach() + + vcpkg_list(SET renamed_libs) + if(VCPKG_TARGET_IS_WINDOWS AND VCPKG_LIBRARY_LINKAGE STREQUAL static AND NOT VCPKG_TARGET_IS_MINGW) + # Meson names all static libraries lib<name>.a which basically breaks the world + file(GLOB_RECURSE gen_libraries "${CURRENT_PACKAGES_DIR}*/**/lib*.a") + foreach(gen_library IN LISTS gen_libraries) + get_filename_component(libdir "${gen_library}" DIRECTORY) + get_filename_component(libname "${gen_library}" NAME) + string(REGEX REPLACE ".a$" ".lib" fixed_librawname "${libname}") + string(REGEX REPLACE "^lib" "" fixed_librawname "${fixed_librawname}") + file(RENAME "${gen_library}" "${libdir}/${fixed_librawname}") + # For cmake fixes. + string(REGEX REPLACE ".a$" "" origin_librawname "${libname}") + string(REGEX REPLACE ".lib$" "" fixed_librawname "${fixed_librawname}") + vcpkg_list(APPEND renamed_libs ${fixed_librawname}) + set(${librawname}_old ${origin_librawname}) + set(${librawname}_new ${fixed_librawname}) + endforeach() + file(GLOB_RECURSE cmake_files "${CURRENT_PACKAGES_DIR}*/*.cmake") + foreach(cmake_file IN LISTS cmake_files) + foreach(current_lib IN LISTS renamed_libs) + vcpkg_replace_string("${cmake_file}" "${${current_lib}_old}" "${${current_lib}_new}" IGNORE_UNCHANGED) + endforeach() + endforeach() + endif() + + if(VCPKG_TARGET_IS_OSX) + vcpkg_restore_env_variables(VARS SDKROOT MACOSX_DEPLOYMENT_TARGET) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake b/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake new file mode 100644 index 0000000..01d9011 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_msbuild.cmake @@ -0,0 +1,163 @@ +function(vcpkg_install_msbuild) + cmake_parse_arguments( + PARSE_ARGV 0 + "arg" + "USE_VCPKG_INTEGRATION;ALLOW_ROOT_INCLUDES;REMOVE_ROOT_INCLUDES;SKIP_CLEAN" + "SOURCE_PATH;PROJECT_SUBPATH;INCLUDES_SUBPATH;LICENSE_SUBPATH;RELEASE_CONFIGURATION;DEBUG_CONFIGURATION;PLATFORM;PLATFORM_TOOLSET;TARGET_PLATFORM_VERSION;TARGET" + "OPTIONS;OPTIONS_RELEASE;OPTIONS_DEBUG" + ) + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(WARNING "vcpkg_install_msbuild was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + if(NOT DEFINED arg_RELEASE_CONFIGURATION) + set(arg_RELEASE_CONFIGURATION Release) + endif() + if(NOT DEFINED arg_DEBUG_CONFIGURATION) + set(arg_DEBUG_CONFIGURATION Debug) + endif() + if(NOT DEFINED arg_PLATFORM) + if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64") + set(arg_PLATFORM x64) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86") + set(arg_PLATFORM Win32) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm") + set(arg_PLATFORM ARM) + elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64") + set(arg_PLATFORM arm64) + else() + message(FATAL_ERROR "Unsupported target architecture") + endif() + endif() + if(NOT DEFINED arg_PLATFORM_TOOLSET) + set(arg_PLATFORM_TOOLSET "${VCPKG_PLATFORM_TOOLSET}") + endif() + if(NOT DEFINED arg_TARGET_PLATFORM_VERSION) + vcpkg_get_windows_sdk(arg_TARGET_PLATFORM_VERSION) + endif() + if(NOT DEFINED arg_TARGET) + set(arg_TARGET Rebuild) + endif() + + list(APPEND arg_OPTIONS + "/t:${arg_TARGET}" + "/p:Platform=${arg_PLATFORM}" + "/p:PlatformToolset=${arg_PLATFORM_TOOLSET}" + "/p:VCPkgLocalAppDataDisabled=true" + "/p:UseIntelMKL=No" + "/p:WindowsTargetPlatformVersion=${arg_TARGET_PLATFORM_VERSION}" + "/p:VcpkgTriplet=${TARGET_TRIPLET}" + "/p:VcpkgInstalledDir=${_VCPKG_INSTALLED_DIR}" + "/p:VcpkgManifestInstall=false" + "/p:UseMultiToolTask=true" + "/p:MultiProcMaxCount=${VCPKG_CONCURRENCY}" + "/p:EnforceProcessCountAcrossBuilds=true" + "/m:${VCPKG_CONCURRENCY}" + ) + + if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + # Disable LTCG for static libraries because this setting introduces ABI incompatibility between minor compiler versions + # TODO: Add a way for the user to override this if they want to opt-in to incompatibility + list(APPEND arg_OPTIONS "/p:WholeProgramOptimization=false") + endif() + + if(arg_USE_VCPKG_INTEGRATION) + list(APPEND arg_OPTIONS + "/p:ForceImportBeforeCppTargets=${SCRIPTS}/buildsystems/msbuild/vcpkg.targets" + "/p:VcpkgApplocalDeps=false" + ) + endif() + + get_filename_component(source_path_suffix "${arg_SOURCE_PATH}" NAME) + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + message(STATUS "Building ${arg_PROJECT_SUBPATH} for Release") + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + file(COPY "${arg_SOURCE_PATH}" DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel") + set(source_copy_path "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/${source_path_suffix}") + vcpkg_execute_required_process( + COMMAND msbuild "${source_copy_path}/${arg_PROJECT_SUBPATH}" + "/p:Configuration=${arg_RELEASE_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_RELEASE} + WORKING_DIRECTORY "${source_copy_path}" + LOGNAME "build-${TARGET_TRIPLET}-rel" + ) + file(GLOB_RECURSE libs "${source_copy_path}/*.lib") + file(GLOB_RECURSE dlls "${source_copy_path}/*.dll") + file(GLOB_RECURSE exes "${source_copy_path}/*.exe") + if(NOT libs STREQUAL "") + file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/lib") + endif() + if(NOT dlls STREQUAL "") + file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/bin") + endif() + if(NOT exes STREQUAL "") + file(COPY ${exes} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}") + vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}") + endif() + endif() + + if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + message(STATUS "Building ${arg_PROJECT_SUBPATH} for Debug") + file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + file(COPY "${arg_SOURCE_PATH}" DESTINATION "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg") + set(source_copy_path "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/${source_path_suffix}") + vcpkg_execute_required_process( + COMMAND msbuild "${source_copy_path}/${arg_PROJECT_SUBPATH}" + "/p:Configuration=${arg_DEBUG_CONFIGURATION}" + ${arg_OPTIONS} + ${arg_OPTIONS_DEBUG} + WORKING_DIRECTORY "${source_copy_path}" + LOGNAME "build-${TARGET_TRIPLET}-dbg" + ) + file(GLOB_RECURSE libs "${source_copy_path}/*.lib") + file(GLOB_RECURSE dlls "${source_copy_path}/*.dll") + if(NOT libs STREQUAL "") + file(COPY ${libs} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib") + endif() + if(NOT dlls STREQUAL "") + file(COPY ${dlls} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin") + endif() + endif() + + vcpkg_copy_pdbs() + + if(NOT arg_SKIP_CLEAN) + vcpkg_clean_msbuild() + endif() + + if(DEFINED arg_INCLUDES_SUBPATH) + file(COPY "${arg_SOURCE_PATH}/${arg_INCLUDES_SUBPATH}/" + DESTINATION "${CURRENT_PACKAGES_DIR}/include/" + ) + file(GLOB_RECURSE all_am_file "${CURRENT_PACKAGES_DIR}/include/*.am") + file(GLOB_RECURSE all_in_file "${CURRENT_PACKAGES_DIR}/include/*.in") + if(NOT "${all_am_file}" STREQUAL "") + file(REMOVE ${all_am_file}) + endif() + if(NOT "${all_in_file}" STREQUAL "") + file(REMOVE ${all_in_file}) + endif() + file(GLOB root_includes + LIST_DIRECTORIES false + "${CURRENT_PACKAGES_DIR}/include/*") + if(NOT root_includes STREQUAL "") + if(arg_REMOVE_ROOT_INCLUDES) + file(REMOVE ${root_includes}) + elseif(arg_ALLOW_ROOT_INCLUDES) + else() + message(FATAL_ERROR "Top-level files were found in ${CURRENT_PACKAGES_DIR}/include; this may indicate a problem with the call to `vcpkg_install_msbuild()`.\nTo avoid conflicts with other libraries, it is recommended to not put includes into the root `include/` directory.\nPass either ALLOW_ROOT_INCLUDES or REMOVE_ROOT_INCLUDES to handle these files.\n") + endif() + endif() + endif() + + if(DEFINED arg_LICENSE_SUBPATH) + file(INSTALL "${arg_SOURCE_PATH}/${arg_LICENSE_SUBPATH}" + DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" + RENAME copyright + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake new file mode 100644 index 0000000..16dcd62 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_nmake.cmake @@ -0,0 +1,57 @@ +function(vcpkg_install_nmake)
+ vcpkg_list(SET multi_value_args
+ TARGET
+ OPTIONS OPTIONS_DEBUG OPTIONS_RELEASE
+ PRERUN_SHELL PRERUN_SHELL_DEBUG PRERUN_SHELL_RELEASE)
+
+ cmake_parse_arguments(PARSE_ARGV 0 arg
+ "NO_DEBUG;PREFER_JOM"
+ "SOURCE_PATH;PROJECT_SUBPATH;PROJECT_NAME;CL_LANGUAGE"
+ "${multi_value_args}"
+ )
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(WARNING "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+ if(NOT DEFINED arg_SOURCE_PATH)
+ message(FATAL_ERROR "SOURCE_PATH must be specified")
+ endif()
+
+ if(NOT VCPKG_HOST_IS_WINDOWS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} only support windows.")
+ endif()
+
+ # backwards-compatibility hack
+ # gdal passes `arg_OPTIONS_DEBUG` (and RELEASE) as a single argument,
+ # so we need to split them again
+ set(arg_OPTIONS_DEBUG ${arg_OPTIONS_DEBUG})
+ set(arg_OPTIONS_RELEASE ${arg_OPTIONS_RELEASE})
+
+ vcpkg_list(SET extra_args)
+ # switch args
+ if(arg_NO_DEBUG)
+ vcpkg_list(APPEND extra_args NO_DEBUG)
+ endif()
+ if(arg_PREFER_JOM)
+ vcpkg_list(APPEND extra_args PREFER_JOM)
+ endif()
+
+ # single args
+ foreach(arg IN ITEMS PROJECT_SUBPATH PROJECT_NAME CL_LANGUAGE)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args ${arg} "${arg_${arg}}")
+ endif()
+ endforeach()
+
+ # multi-value args
+ foreach(arg IN LISTS multi_value_args)
+ if(DEFINED "arg_${arg}")
+ vcpkg_list(APPEND extra_args ${arg} ${arg_${arg}})
+ endif()
+ endforeach()
+
+ vcpkg_build_nmake(
+ SOURCE_PATH "${arg_SOURCE_PATH}"
+ ENABLE_INSTALL
+ LOGFILE_ROOT install
+ ${extra_args})
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake b/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake new file mode 100644 index 0000000..c665486 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_install_qmake.cmake @@ -0,0 +1,45 @@ +function(vcpkg_install_qmake)
+ z_vcpkg_function_arguments(args)
+
+ vcpkg_build_qmake(${args})
+
+ file(GLOB_RECURSE release_libs
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.lib"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.a"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.so"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.so.*"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.dylib"
+ )
+ file(GLOB_RECURSE release_bins
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/*.dll"
+ )
+ file(GLOB_RECURSE debug_libs
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.lib"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.a"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.so"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.so.*"
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.dylib"
+ )
+ file(GLOB_RECURSE debug_bins
+ "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/*.dll"
+ )
+ if("${release_libs}" STREQUAL "" AND "${debug_libs}" STREQUAL "")
+ message(FATAL_ERROR "Build did not appear to produce any libraries. If this is intended, use `vcpkg_build_qmake()` directly.")
+ endif()
+ if(NOT "${release_libs}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib")
+ file(COPY ${release_libs} DESTINATION "${CURRENT_PACKAGES_DIR}/lib")
+ endif()
+ if(NOT "${debug_libs}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib")
+ file(COPY ${debug_libs} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/lib")
+ endif()
+ if(NOT "${release_bins}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/bin")
+ file(COPY ${release_bins} DESTINATION "${CURRENT_PACKAGES_DIR}/bin")
+ endif()
+ if(NOT "${debug_bins}" STREQUAL "")
+ file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/bin")
+ file(COPY ${debug_bins} DESTINATION "${CURRENT_PACKAGES_DIR}/debug/bin")
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/vcpkg_list.cmake b/vcpkg/scripts/cmake/vcpkg_list.cmake new file mode 100644 index 0000000..d7fa0fe --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_list.cmake @@ -0,0 +1,165 @@ +macro(z_vcpkg_list_escape_once_more lst) + string(REPLACE [[\;]] [[\\;]] "${lst}" "${${lst}}") +endmacro() + +function(vcpkg_list) + # NOTE: as this function replaces an existing CMake command, + # it does not use cmake_parse_arguments + + # vcpkg_list(<operation> <list_var> ...) + # A0 A1 + + if(ARGC LESS "2") + message(FATAL_ERROR "vcpkg_list requires at least two arguments.") + endif() + + if(ARGV1 MATCHES "^ARGV([0-9]*)$|^ARG[CN]$|^CMAKE_CURRENT_FUNCTION") + message(FATAL_ERROR "vcpkg_list does not support the list_var being ${ARGV1}. + Please use a different variable name.") + endif() + + set(list "${${ARGV1}}") + set(operation "${ARGV0}") + set(list_var "${ARGV1}") + + if(operation STREQUAL "SET") + z_vcpkg_function_arguments(args 2) + set("${list_var}" "${args}" PARENT_SCOPE) + return() + endif() + + # Normal reading functions + if(operation STREQUAL "LENGTH") + # vcpkg_list(LENGTH <list-var> <out-var>) + # A0 A1 A2 + if(NOT ARGC EQUAL "3") + message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires two arguments.") + endif() + list(LENGTH list out) + set("${ARGV2}" "${out}" PARENT_SCOPE) + return() + endif() + if(operation MATCHES "^(GET|JOIN|FIND)$") + # vcpkg_list(<operation> <list-var> <arg> <out-var>) + # A0 A1 A2 A3 + if(NOT ARGC EQUAL "4") + message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires three arguments.") + endif() + if(operation STREQUAL "GET") + list(LENGTH list length) + if(length EQUAL "0") + message(FATAL_ERROR "vcpkg_list GET given empty list") + elseif(ARGV2 GREATER_EQUAL length OR ARGV2 LESS "-${length}") + message(FATAL_ERROR "vcpkg_list index: ${ARGV2} is not in range") + endif() + endif() + list("${operation}" list "${ARGV2}" out) + set("${ARGV3}" "${out}" PARENT_SCOPE) + return() + endif() + if(operation STREQUAL "SUBLIST") + # vcpkg_list(SUBLIST <list-var> <begin> <length> <out-var>) + # A0 A1 A2 A3 A4 + if(NOT ARGC EQUAL "5") + message(FATAL_ERROR "vcpkg_list sub-command SUBLIST requires four arguments.") + endif() + list(LENGTH list length) + if(ARGV2 LESS "0" OR (ARGV2 GREATER_EQUAL length AND NOT ARGV2 EQUAL "0")) + message(FATAL_ERROR "vcpkg_list begin index: ${ARGV2} is out of range") + endif() + z_vcpkg_list_escape_once_more(list) + list(SUBLIST list "${ARGV2}" "${ARGV3}" out) + set("${ARGV4}" "${out}" PARENT_SCOPE) + return() + endif() + + # modification functions + + if(operation MATCHES "^(APPEND|PREPEND)$") + # vcpkg_list(<operation> <list> [<element>...]) + # A0 A1 A2... + + # if ARGC <= 2, then we don't have to do anything + if(ARGC GREATER 2) + z_vcpkg_function_arguments(args 2) + if(list STREQUAL "") + set("${list_var}" "${args}" PARENT_SCOPE) + elseif(operation STREQUAL "APPEND") + set("${list_var}" "${list};${args}" PARENT_SCOPE) + else() + set("${list_var}" "${args};${list}" PARENT_SCOPE) + endif() + endif() + return() + endif() + if(operation STREQUAL "INSERT") + # vcpkg_list(INSERT <list> <index> [<element>...]) + # A0 A1 A2 A3... + + list(LENGTH list length) + if(ARGV2 LESS "-{$length}" OR ARGV2 GREATER length) + message(FATAL_ERROR "vcpkg_list index: ${ARGV2} out of range") + endif() + if(ARGC GREATER 3) + # list(LENGTH) is one of the few subcommands that's fine + list(LENGTH list length) + if(ARGV2 LESS "0") + math(EXPR ARGV2 "${length} + ${ARGV2}") + endif() + if(ARGV2 LESS "0" OR ARGV2 GREATER length) + message(FATAL_ERROR "list index: ${ARGV2} out of range (-${length}, ${length})") + endif() + + z_vcpkg_function_arguments(args 3) + if(list STREQUAL "") + set("${list_var}" "${args}" PARENT_SCOPE) + elseif(ARGV2 EQUAL "0") + set("${list_var}" "${args};${list}" PARENT_SCOPE) + elseif(ARGV2 EQUAL length) + set("${list_var}" "${list};${args}" PARENT_SCOPE) + else() + vcpkg_list(SUBLIST list 0 "${ARGV2}" list_start) + vcpkg_list(SUBLIST list "${ARGV2}" -1 list_end) + set("${list_var}" "${list_start};${args};${list_end}" PARENT_SCOPE) + endif() + elseif(ARGC LESS 3) + message(FATAL_ERROR "vcpkg_list sub-command INSERT requires at least two arguments.") + endif() + return() + endif() + + if(operation MATCHES "^(POP_BACK|POP_FRONT|REVERSE|REMOVE_DUPLICATES)$") + # vcpkg_list(<operation> <list>) + # A0 A1 + if(NOT ARGC EQUAL 2) + message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires one argument.") + endif() + z_vcpkg_list_escape_once_more(list) + list("${operation}" list) + set("${list_var}" "${list}" PARENT_SCOPE) + return() + endif() + + if(operation MATCHES "^(REMOVE_AT|REMOVE_ITEM)$") + # vcpkg_list(<operation> <list> <index-or-item>) + # A0 A1 A2 + if(NOT ARGC EQUAL 3) + message(FATAL_ERROR "vcpkg_list sub-command ${operation} requires two arguments.") + endif() + if(operation STREQUAL "REMOVE_AT") + list(LENGTH list length) + if(ARGV2 GREATER_EQUAL length OR ARGV2 LESS "-${length}") + message(FATAL_ERROR "vcpkg_list index: ${ARGV2} out of range") + endif() + endif() + + z_vcpkg_list_escape_once_more(list) + string(REPLACE [[;]] [[\;]] ARGV2 "${ARGV2}") + + list("${operation}" list "${ARGV2}") + set("${list_var}" "${list}" PARENT_SCOPE) + return() + endif() + + message(FATAL_ERROR "vcpkg_list sub-command ${operation} is not yet implemented.") +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake b/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake new file mode 100644 index 0000000..1ef1496 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_minimum_required.cmake @@ -0,0 +1,35 @@ +function(vcpkg_minimum_required) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "VERSION" "") + if(NOT DEFINED VCPKG_BASE_VERSION) + message(FATAL_ERROR "Your vcpkg executable is outdated and is not compatible with the current CMake scripts. + Please re-acquire vcpkg by running bootstrap-vcpkg." + ) + endif() + if(NOT DEFINED arg_VERSION) + message(FATAL_ERROR "VERSION must be specified") + endif() + + set(vcpkg_date_regex "^[12][0-9][0-9][0-9]-[01][0-9]-[0-3][0-9]$") + if(NOT "${VCPKG_BASE_VERSION}" MATCHES "${vcpkg_date_regex}") + message(FATAL_ERROR + "vcpkg internal failure; VCPKG_BASE_VERSION (${VCPKG_BASE_VERSION}) was not a valid date." + ) + endif() + + if(NOT "${arg_VERSION}" MATCHES "${vcpkg_date_regex}") + message(FATAL_ERROR + "VERSION (${arg_VERSION}) was not a valid date - expected something of the form 'YYYY-MM-DD'" + ) + endif() + + string(REPLACE "-" "." VCPKG_BASE_VERSION_as_dotted "${VCPKG_BASE_VERSION}") + string(REPLACE "-" "." arg_VERSION_as_dotted "${arg_VERSION}") + + if("${VCPKG_BASE_VERSION_as_dotted}" VERSION_LESS "${arg_VERSION_as_dotted}") + message(FATAL_ERROR + "Your vcpkg executable is from ${VCPKG_BASE_VERSION} which is older than required by the caller " + "of vcpkg_minimum_required(VERSION ${arg_VERSION}). " + "Please re-acquire vcpkg by running bootstrap-vcpkg." + ) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_replace_string.cmake b/vcpkg/scripts/cmake/vcpkg_replace_string.cmake new file mode 100644 index 0000000..1778f6e --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_replace_string.cmake @@ -0,0 +1,20 @@ +function(vcpkg_replace_string filename match replace) + cmake_parse_arguments(PARSE_ARGV 3 "arg" "REGEX;IGNORE_UNCHANGED" "" "") + if(arg_REGEX) + set(arg_REGEX "REGEX") + else() + if("${match}" STREQUAL "${replace}") + return() # Avoid reading the file or triggering warnings + endif() + + set(arg_REGEX "") + endif () + file(READ "${filename}" contents) + string(SHA512 before_hash "${contents}") + string(${arg_REGEX} REPLACE "${match}" "${replace}" contents "${contents}") + string(SHA512 after_hash "${contents}") + if(NOT arg_IGNORE_UNCHANGED AND "${before_hash}" STREQUAL "${after_hash}") + message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_replace_string made no changes.") + endif() + file(WRITE "${filename}" "${contents}") +endfunction() diff --git a/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake b/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake new file mode 100644 index 0000000..b3eb9f4 --- /dev/null +++ b/vcpkg/scripts/cmake/vcpkg_test_cmake.cmake @@ -0,0 +1,4 @@ +# DEPRECATED
+function(vcpkg_test_cmake)
+ message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "vcpkg_test_cmake was a no-op and has been removed. Please remove the call to `vcpkg_test_cmake()`.")
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake b/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake new file mode 100644 index 0000000..9a270ba --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_apply_patches.cmake @@ -0,0 +1,45 @@ +function(z_vcpkg_apply_patches) + cmake_parse_arguments(PARSE_ARGV 0 "arg" "QUIET" "SOURCE_PATH" "PATCHES") + + if(DEFINED arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "internal error: z_vcpkg_apply_patches was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}") + endif() + + find_program(GIT NAMES git git.cmd REQUIRED) + if(DEFINED ENV{GIT_CONFIG_NOSYSTEM}) + set(git_config_nosystem_backup "$ENV{GIT_CONFIG_NOSYSTEM}") + else() + unset(git_config_nosystem_backup) + endif() + + set(ENV{GIT_CONFIG_NOSYSTEM} 1) + set(patchnum 0) + foreach(patch IN LISTS arg_PATCHES) + get_filename_component(absolute_patch "${patch}" ABSOLUTE BASE_DIR "${CURRENT_PORT_DIR}") + message(STATUS "Applying patch ${patch}") + set(logname "patch-${TARGET_TRIPLET}-${patchnum}") + vcpkg_execute_in_download_mode( + COMMAND "${GIT}" -c core.longpaths=true -c core.autocrlf=false -c core.filemode=true --work-tree=. --git-dir=.git apply "${absolute_patch}" --ignore-whitespace --whitespace=nowarn --verbose + OUTPUT_FILE "${CURRENT_BUILDTREES_DIR}/${logname}-out.log" + ERROR_VARIABLE error + WORKING_DIRECTORY "${arg_SOURCE_PATH}" + RESULT_VARIABLE error_code + ) + file(WRITE "${CURRENT_BUILDTREES_DIR}/${logname}-err.log" "${error}") + + if(error_code) + if(arg_QUIET) + message(STATUS "Applying patch ${patch} - failure silenced") + else() + message(FATAL_ERROR "Applying patch failed: ${error}") + endif() + endif() + + math(EXPR patchnum "${patchnum} + 1") + endforeach() + if(DEFINED git_config_nosystem_backup) + set(ENV{GIT_CONFIG_NOSYSTEM} "${git_config_nosystem_backup}") + else() + unset(ENV{GIT_CONFIG_NOSYSTEM}) + endif() +endfunction() diff --git a/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake b/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake new file mode 100644 index 0000000..b238f00 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_escape_regex_control_characters.cmake @@ -0,0 +1,8 @@ +function(z_vcpkg_escape_regex_control_characters out_var string) + if(ARGC GREATER "2") + message(FATAL_ERROR "z_vcpkg_escape_regex_control_characters passed extra arguments: ${ARGN}") + endif() + # uses | instead of [] to avoid confusion; additionally, CMake doesn't support `]` in a `[]` + string(REGEX REPLACE [[\[|\]|\(|\)|\.|\+|\*|\^|\\|\$|\?|\|]] [[\\\0]] escaped_content "${string}") + set("${out_var}" "${escaped_content}" PARENT_SCOPE) +endfunction() diff --git a/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake new file mode 100644 index 0000000..fb3d058 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath.cmake @@ -0,0 +1,131 @@ +function(z_vcpkg_calculate_corrected_rpath)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "ELF_FILE_DIR;ORG_RPATH;OUT_NEW_RPATH_VAR"
+ "")
+
+ set(current_prefix "${CURRENT_PACKAGES_DIR}")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}")
+ file(RELATIVE_PATH relative_from_packages "${CURRENT_PACKAGES_DIR}" "${arg_ELF_FILE_DIR}")
+ if("${relative_from_packages}/" MATCHES "^debug/|^(manual-tools|tools)/[^/]*/debug/")
+ set(current_prefix "${CURRENT_PACKAGES_DIR}/debug")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}/debug")
+ endif()
+
+ # compute path relative to lib
+ file(RELATIVE_PATH relative_to_lib "${arg_ELF_FILE_DIR}" "${current_prefix}/lib")
+ # compute path relative to prefix
+ file(RELATIVE_PATH relative_to_prefix "${arg_ELF_FILE_DIR}" "${current_prefix}")
+
+ set(rpath_norm "")
+ if(NOT "${arg_ORG_RPATH}" STREQUAL "")
+ cmake_path(CONVERT "${arg_ORG_RPATH}" TO_CMAKE_PATH_LIST rpath_norm)
+
+ # pattern matching helpers
+ list(TRANSFORM rpath_norm PREPEND "::")
+ list(TRANSFORM rpath_norm APPEND "/")
+
+ string(REPLACE "::${arg_ELF_FILE_DIR}/" "::\$ORIGIN/" rpath_norm "${rpath_norm}")
+ # Remove unnecessary up/down ; don't use normalize $ORIGIN/../ will be removed otherwise
+ string(REPLACE "/lib/pkgconfig/../../" "/" rpath_norm "${rpath_norm}")
+ # lib relative corrections
+ string(REPLACE "::${current_prefix}/lib/" "::\$ORIGIN/${relative_to_lib}/" rpath_norm "${rpath_norm}")
+ string(REPLACE "::${current_installed_prefix}/lib/" "::\$ORIGIN/${relative_to_lib}/" rpath_norm "${rpath_norm}")
+ # prefix relativ
+ string(REPLACE "::${current_prefix}/" "::\$ORIGIN/${relative_to_prefix}/" rpath_norm "${rpath_norm}")
+ string(REPLACE "::${current_installed_prefix}/" "::\$ORIGIN/${relative_to_prefix}/" rpath_norm "${rpath_norm}")
+
+ if(NOT X_VCPKG_RPATH_KEEP_SYSTEM_PATHS)
+ list(FILTER rpath_norm INCLUDE REGEX "::\\\$ORIGIN.+") # Only keep paths relativ to ORIGIN
+ endif()
+
+ # Path normalization
+ list(TRANSFORM rpath_norm REPLACE "/+" "/")
+
+ # remove pattern matching helpers
+ list(TRANSFORM rpath_norm REPLACE "^::" "")
+ list(TRANSFORM rpath_norm REPLACE "/\$" "")
+ endif()
+
+ if(NOT relative_to_lib STREQUAL "")
+ list(PREPEND rpath_norm "\$ORIGIN/${relative_to_lib}")
+ endif()
+ list(PREPEND rpath_norm "\$ORIGIN") # Make ORIGIN the first entry
+ list(TRANSFORM rpath_norm REPLACE "/$" "")
+ list(REMOVE_DUPLICATES rpath_norm)
+ cmake_path(CONVERT "${rpath_norm}" TO_NATIVE_PATH_LIST new_rpath)
+
+ set("${arg_OUT_NEW_RPATH_VAR}" "${new_rpath}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_fixup_rpath_in_dir)
+ # We need to iterate trough everything because we
+ # can't predict where an elf file will be located
+ file(GLOB root_entries LIST_DIRECTORIES TRUE "${CURRENT_PACKAGES_DIR}/*")
+
+ # Skip some folders for better throughput
+ list(APPEND folders_to_skip "include")
+ list(JOIN folders_to_skip "|" folders_to_skip_regex)
+ set(folders_to_skip_regex "^(${folders_to_skip_regex})$")
+
+ # In download mode, we don't know if we're going to need PATCHELF, so be pessimistic and fetch
+ # it so it ends up in the downloads directory.
+ if(VCPKG_DOWNLOAD_MODE)
+ vcpkg_find_acquire_program(PATCHELF)
+ endif()
+
+ foreach(folder IN LISTS root_entries)
+ if(NOT IS_DIRECTORY "${folder}")
+ continue()
+ endif()
+
+ get_filename_component(folder_name "${folder}" NAME)
+ if(folder_name MATCHES "${folders_to_skip_regex}")
+ continue()
+ endif()
+
+ file(GLOB_RECURSE elf_files LIST_DIRECTORIES FALSE "${folder}/*")
+ list(FILTER elf_files EXCLUDE REGEX "\\\.(a|cpp|cc|cxx|c|hpp|h|hh|hxx|inc|json|toml|yaml|man|m4|ac|am|in|log|txt|pyi?|pyc|pyx|pxd|pc|cmake|f77|f90|f03|fi|f|cu|mod|ini|whl|cat|csv|rst|md|npy|npz|template|build)$")
+ list(FILTER elf_files EXCLUDE REGEX "/(copyright|LICENSE|METADATA)$")
+
+ foreach(elf_file IN LISTS elf_files)
+ if(IS_SYMLINK "${elf_file}")
+ continue()
+ endif()
+
+ vcpkg_find_acquire_program(PATCHELF) # Note that this relies on vcpkg_find_acquire_program short
+ # circuiting after the first run
+ # If this fails, the file is not an elf
+ execute_process(
+ COMMAND "${PATCHELF}" --print-rpath "${elf_file}"
+ OUTPUT_VARIABLE readelf_output
+ ERROR_VARIABLE read_rpath_error
+ )
+ string(REPLACE "\n" "" readelf_output "${readelf_output}")
+ if(NOT "${read_rpath_error}" STREQUAL "")
+ continue()
+ endif()
+
+ get_filename_component(elf_file_dir "${elf_file}" DIRECTORY)
+
+ z_vcpkg_calculate_corrected_rpath(
+ ELF_FILE_DIR "${elf_file_dir}"
+ ORG_RPATH "${readelf_output}"
+ OUT_NEW_RPATH_VAR new_rpath
+ )
+
+ execute_process(
+ COMMAND "${PATCHELF}" --set-rpath "${new_rpath}" "${elf_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_rpath_error
+ )
+
+ if(NOT "${set_rpath_error}" STREQUAL "")
+ message(WARNING "Couldn't adjust RPATH of '${elf_file}': ${set_rpath_error}")
+ continue()
+ endif()
+
+ message(STATUS "Adjusted RPATH of '${elf_file}' (From '${readelf_output}' -> To '${new_rpath}')")
+ endforeach()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake new file mode 100644 index 0000000..c8a6269 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_fixup_rpath_macho.cmake @@ -0,0 +1,243 @@ +function(z_vcpkg_calculate_corrected_macho_rpath)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "MACHO_FILE_DIR;OUT_NEW_RPATH_VAR"
+ "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ set(current_prefix "${CURRENT_PACKAGES_DIR}")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}")
+ file(RELATIVE_PATH relative_from_packages "${CURRENT_PACKAGES_DIR}" "${arg_MACHO_FILE_DIR}")
+ if("${relative_from_packages}/" MATCHES "^debug/" OR "${relative_from_packages}/" MATCHES "^(manual-)?tools/.*/debug/.*")
+ set(current_prefix "${CURRENT_PACKAGES_DIR}/debug")
+ set(current_installed_prefix "${CURRENT_INSTALLED_DIR}/debug")
+ endif()
+
+ # compute path relative to lib
+ file(RELATIVE_PATH relative_to_lib "${arg_MACHO_FILE_DIR}" "${current_prefix}/lib")
+ #Â remove trailing slash
+ string(REGEX REPLACE "/+$" "" relative_to_lib "${relative_to_lib}")
+
+ if(NOT relative_to_lib STREQUAL "")
+ set(new_rpath "@loader_path/${relative_to_lib}")
+ else()
+ set(new_rpath "@loader_path")
+ endif()
+
+ set("${arg_OUT_NEW_RPATH_VAR}" "${new_rpath}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_regex_escape)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg"
+ ""
+ "STRING;OUT_REGEX_ESCAPED_STRING_VAR"
+ "")
+ string(REGEX REPLACE "([][+.*()^])" "\\\\\\1" regex_escaped "${arg_STRING}")
+ set("${arg_OUT_REGEX_ESCAPED_STRING_VAR}" "${regex_escaped}" PARENT_SCOPE)
+endfunction()
+
+function(z_vcpkg_fixup_macho_rpath_in_dir)
+ # We need to iterate through everything because we
+ # can't predict where a Mach-O file will be located
+ file(GLOB root_entries LIST_DIRECTORIES TRUE "${CURRENT_PACKAGES_DIR}/*")
+
+ # Skip some folders for better throughput
+ list(APPEND folders_to_skip "include")
+ list(JOIN folders_to_skip "|" folders_to_skip_regex)
+ set(folders_to_skip_regex "^(${folders_to_skip_regex})$")
+
+ find_program(
+ install_name_tool_cmd
+ NAMES install_name_tool
+ DOC "Absolute path of install_name_tool cmd"
+ REQUIRED
+ )
+
+ find_program(
+ otool_cmd
+ NAMES otool
+ DOC "Absolute path of otool cmd"
+ REQUIRED
+ )
+
+ find_program(
+ file_cmd
+ NAMES file
+ DOC "Absolute path of file cmd"
+ REQUIRED
+ )
+
+ foreach(folder IN LISTS root_entries)
+ if(NOT IS_DIRECTORY "${folder}")
+ continue()
+ endif()
+
+ get_filename_component(folder_name "${folder}" NAME)
+ if(folder_name MATCHES "${folders_to_skip_regex}")
+ continue()
+ endif()
+
+ file(GLOB_RECURSE macho_files LIST_DIRECTORIES FALSE "${folder}/*")
+ list(FILTER macho_files EXCLUDE REGEX [[\.(cpp|cc|cxx|c|hpp|h|hh|hxx|inc|json|toml|yaml|man|m4|ac|am|in|log|txt|pyi?|pyc|pyx|pxd|pc|cmake|f77|f90|f03|fi|f|cu|mod|ini|whl|cat|csv|rst|md|npy|npz|template|build)$]])
+ list(FILTER macho_files EXCLUDE REGEX "/(copyright|LICENSE|METADATA)$")
+
+ foreach(macho_file IN LISTS macho_files)
+ if(IS_SYMLINK "${macho_file}")
+ continue()
+ endif()
+
+ # Determine if the file is a Mach-O executable or shared library
+ execute_process(
+ COMMAND "${file_cmd}" -b "${macho_file}"
+ OUTPUT_VARIABLE file_output
+ OUTPUT_STRIP_TRAILING_WHITESPACE
+ )
+ if(file_output MATCHES ".*Mach-O.*shared library.*")
+ set(file_type "shared")
+ elseif(file_output MATCHES ".*Mach-O.*executable.*")
+ set(file_type "executable")
+ else()
+ debug_message("File `${macho_file}` reported as `${file_output}` is not a Mach-O file")
+ continue()
+ endif()
+
+ list(APPEND macho_executables_and_shared_libs "${macho_file}")
+
+ get_filename_component(macho_file_dir "${macho_file}" DIRECTORY)
+ get_filename_component(macho_file_name "${macho_file}" NAME)
+
+ z_vcpkg_calculate_corrected_macho_rpath(
+ MACHO_FILE_DIR "${macho_file_dir}"
+ OUT_NEW_RPATH_VAR new_rpath
+ )
+
+ if("${file_type}" STREQUAL "shared")
+ # Set the install name for shared libraries
+ execute_process(
+ COMMAND "${otool_cmd}" -D "${macho_file}"
+ OUTPUT_VARIABLE get_id_ov
+ RESULT_VARIABLE get_id_rv
+ )
+ if(NOT get_id_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain install name id from '${macho_file}'")
+ endif()
+ set(macho_new_id "@rpath/${macho_file_name}")
+ message(STATUS "Setting install name id of '${macho_file}' to '@rpath/${macho_file_name}'")
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" -id "${macho_new_id}" "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_id_error
+ RESULT_VARIABLE set_id_exit_code
+ )
+ if(NOT "${set_id_error}" STREQUAL "" AND NOT set_id_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust install name of '${macho_file}': ${set_id_error}")
+ continue()
+ endif()
+
+ # otool -D <macho_file> typically returns lines like:
+
+ # <macho_file>:
+ # <id>
+
+ # But also with ARM64 binaries, it can return:
+ # <macho_file> (architecture arm64):
+ # <id>
+
+ # Either way we need to remove the first line and trim the trailing newline char.
+ string(REGEX REPLACE "[^\n]+:\n" "" get_id_ov "${get_id_ov}")
+ string(REGEX REPLACE "\n.*" "" get_id_ov "${get_id_ov}")
+ list(APPEND adjusted_shared_lib_old_ids "${get_id_ov}")
+ list(APPEND adjusted_shared_lib_new_ids "${macho_new_id}")
+ endif()
+
+ # List all existing rpaths
+ execute_process(
+ COMMAND "${otool_cmd}" -l "${macho_file}"
+ OUTPUT_VARIABLE get_rpath_ov
+ RESULT_VARIABLE get_rpath_rv
+ )
+
+ if(NOT get_rpath_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain rpath list from '${macho_file}'")
+ endif()
+ # Extract the LC_RPATH load commands and extract the paths
+ string(REGEX REPLACE "[^\n]+cmd LC_RPATH\n[^\n]+\n[^\n]+path ([^\n]+) \\(offset[^\n]+\n" "rpath \\1\n" get_rpath_ov "${get_rpath_ov}")
+ string(REGEX MATCHALL "rpath [^\n]+" get_rpath_ov "${get_rpath_ov}")
+ string(REGEX REPLACE "rpath " "" rpath_list "${get_rpath_ov}")
+
+ list(FIND rpath_list "${new_rpath}" has_new_rpath)
+ if(NOT has_new_rpath EQUAL -1)
+ list(REMOVE_AT rpath_list ${has_new_rpath})
+ set(rpath_args)
+ else()
+ set(rpath_args -add_rpath "${new_rpath}")
+ endif()
+ foreach(rpath IN LISTS rpath_list)
+ list(APPEND rpath_args "-delete_rpath" "${rpath}")
+ endforeach()
+ if(NOT rpath_args)
+ continue()
+ endif()
+
+ # Set the new rpath
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" ${rpath_args} "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE set_rpath_error
+ RESULT_VARIABLE set_rpath_exit_code
+ )
+
+ if(NOT "${set_rpath_error}" STREQUAL "" AND NOT set_rpath_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust RPATH of '${macho_file}': ${set_rpath_error}")
+ continue()
+ endif()
+
+ message(STATUS "Adjusted RPATH of '${macho_file}' to '${new_rpath}'")
+ endforeach()
+ endforeach()
+
+ # Check for dependent libraries in executables and shared libraries that
+ # need adjusting after id change
+ list(LENGTH adjusted_shared_lib_old_ids last_adjusted_index)
+ if(NOT last_adjusted_index EQUAL 0)
+ math(EXPR last_adjusted_index "${last_adjusted_index} - 1")
+ foreach(macho_file IN LISTS macho_executables_and_shared_libs)
+ execute_process(
+ COMMAND "${otool_cmd}" -L "${macho_file}"
+ OUTPUT_VARIABLE get_deps_ov
+ RESULT_VARIABLE get_deps_rv
+ )
+ if(NOT get_deps_rv EQUAL 0)
+ message(FATAL_ERROR "Could not obtain dependencies list from '${macho_file}'")
+ endif()
+ # change adjusted_shared_lib_old_ids[i] -> adjusted_shared_lib_new_ids[i]
+ foreach(i RANGE ${last_adjusted_index})
+ list(GET adjusted_shared_lib_old_ids ${i} adjusted_old_id)
+ z_vcpkg_regex_escape(
+ STRING "${adjusted_old_id}"
+ OUT_REGEX_ESCAPED_STRING_VAR regex
+ )
+ if(NOT get_deps_ov MATCHES "[ \t]${regex} ")
+ continue()
+ endif()
+ list(GET adjusted_shared_lib_new_ids ${i} adjusted_new_id)
+
+ # Replace the old id with the new id
+ execute_process(
+ COMMAND "${install_name_tool_cmd}" -change "${adjusted_old_id}" "${adjusted_new_id}" "${macho_file}"
+ OUTPUT_QUIET
+ ERROR_VARIABLE change_id_error
+ RESULT_VARIABLE change_id_exit_code
+ )
+ if(NOT "${change_id_error}" STREQUAL "" AND NOT change_id_exit_code EQUAL 0)
+ message(WARNING "Couldn't adjust dependent shared library install name in '${macho_file}': ${change_id_error}")
+ continue()
+ endif()
+ message(STATUS "Adjusted dependent shared library install name in '${macho_file}' (From '${adjusted_old_id}' -> To '${adjusted_new_id}')")
+ endforeach()
+ endforeach()
+ endif()
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake b/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake new file mode 100644 index 0000000..1177ef3 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_forward_output_variable.cmake @@ -0,0 +1,12 @@ +macro(z_vcpkg_forward_output_variable ptr_to_parent_var var_to_forward) + if("${ARGC}" GREATER "2") + message(FATAL_ERROR "z_vcpkg_forward_output_variable was passed extra arguments: ${ARGN}") + endif() + if(DEFINED "${ptr_to_parent_var}") + if(DEFINED "${var_to_forward}") + set("${${ptr_to_parent_var}}" "${${var_to_forward}}" PARENT_SCOPE) + else() + unset("${${ptr_to_parent_var}}" PARENT_SCOPE) + endif() + endif() +endmacro() diff --git a/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake b/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake new file mode 100644 index 0000000..45e60a2 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_function_arguments.cmake @@ -0,0 +1,36 @@ +# NOTE: this function definition is copied directly to scripts/buildsystems/vcpkg.cmake +# do not make changes here without making the same change there. +macro(z_vcpkg_function_arguments OUT_VAR) + if("${ARGC}" EQUAL 1) + set(z_vcpkg_function_arguments_FIRST_ARG 0) + elseif("${ARGC}" EQUAL 2) + set(z_vcpkg_function_arguments_FIRST_ARG "${ARGV1}") + + if(NOT z_vcpkg_function_arguments_FIRST_ARG GREATER_EQUAL "0" AND NOT z_vcpkg_function_arguments_FIRST_ARG LESS "0") + message(FATAL_ERROR "z_vcpkg_function_arguments: index (${z_vcpkg_function_arguments_FIRST_ARG}) is not a number") + elseif(z_vcpkg_function_arguments_FIRST_ARG LESS "0" OR z_vcpkg_function_arguments_FIRST_ARG GREATER ARGC) + message(FATAL_ERROR "z_vcpkg_function_arguments: index (${z_vcpkg_function_arguments_FIRST_ARG}) out of range") + endif() + else() + # vcpkg bug + message(FATAL_ERROR "z_vcpkg_function_arguments: invalid arguments (${ARGV})") + endif() + + set("${OUT_VAR}" "") + + # this allows us to get the value of the enclosing function's ARGC + set(z_vcpkg_function_arguments_ARGC_NAME "ARGC") + set(z_vcpkg_function_arguments_ARGC "${${z_vcpkg_function_arguments_ARGC_NAME}}") + + math(EXPR z_vcpkg_function_arguments_LAST_ARG "${z_vcpkg_function_arguments_ARGC} - 1") + # GREATER_EQUAL added in CMake 3.7 + if(NOT z_vcpkg_function_arguments_LAST_ARG LESS z_vcpkg_function_arguments_FIRST_ARG) + foreach(z_vcpkg_function_arguments_N RANGE "${z_vcpkg_function_arguments_FIRST_ARG}" "${z_vcpkg_function_arguments_LAST_ARG}") + string(REPLACE ";" "\\;" z_vcpkg_function_arguments_ESCAPED_ARG "${ARGV${z_vcpkg_function_arguments_N}}") + # adds an extra ";" on the front + set("${OUT_VAR}" "${${OUT_VAR}};${z_vcpkg_function_arguments_ESCAPED_ARG}") + endforeach() + # and then removes that extra semicolon + string(SUBSTRING "${${OUT_VAR}}" 1 -1 "${OUT_VAR}") + endif() +endmacro() diff --git a/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake b/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake new file mode 100644 index 0000000..51e0f03 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_get_cmake_vars.cmake @@ -0,0 +1,38 @@ +function(z_vcpkg_get_cmake_vars out_file)
+ cmake_parse_arguments(PARSE_ARGV 1 arg "" "" "")
+
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ if(DEFINED VCPKG_BUILD_TYPE)
+ set(cmake_vars_file "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-${VCPKG_BUILD_TYPE}.cmake.log")
+ set(cache_var "Z_VCPKG_GET_CMAKE_VARS_FILE_${VCPKG_BUILD_TYPE}")
+ else()
+ set(cmake_vars_file "${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}.cmake.log")
+ set(cache_var Z_VCPKG_GET_CMAKE_VARS_FILE)
+ endif()
+ if(NOT DEFINED CACHE{${cache_var}})
+ set(${cache_var} "${cmake_vars_file}"
+ CACHE PATH "The file to include to access the CMake variables from a generated project.")
+ vcpkg_configure_cmake(
+ SOURCE_PATH "${SCRIPTS}/get_cmake_vars"
+ OPTIONS_DEBUG "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log"
+ OPTIONS_RELEASE "-DVCPKG_OUTPUT_FILE:PATH=${CURRENT_BUILDTREES_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log"
+ PREFER_NINJA
+ LOGNAME get-cmake-vars-${TARGET_TRIPLET}
+ Z_GET_CMAKE_VARS_USAGE # ignore vcpkg_cmake_configure, be quiet, don't set variables...
+ )
+
+ set(include_string "")
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ string(APPEND include_string "include(\"\${CMAKE_CURRENT_LIST_DIR}/cmake-vars-${TARGET_TRIPLET}-rel.cmake.log\")\n")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ string(APPEND include_string "include(\"\${CMAKE_CURRENT_LIST_DIR}/cmake-vars-${TARGET_TRIPLET}-dbg.cmake.log\")\n")
+ endif()
+ file(WRITE "${cmake_vars_file}" "${include_string}")
+ endif()
+
+ set("${out_file}" "${${cache_var}}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake b/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake new file mode 100644 index 0000000..d09fec1 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_make_python_less_embedded.cmake @@ -0,0 +1,20 @@ +if(NOT DEFINED PYTHON_VERSION)
+ message(FATAL_ERROR "PYTHON_VERSION should be defined.")
+endif()
+
+if(NOT DEFINED PYTHON_DIR)
+ message(FATAL_ERROR "PYTHON_DIR should be defined.")
+endif()
+
+# We want to be able to import stuff from outside of this embeddable package.
+# https://docs.python.org/3/library/sys_path_init.html#pth-files
+string(REGEX MATCH "^3\\.[0-9]+" _python_version_plain "${PYTHON_VERSION}")
+string(REPLACE "." "" _python_version_plain "${_python_version_plain}")
+file(REMOVE "${PYTHON_DIR}/python${_python_version_plain}._pth")
+
+# Since this embeddable package is not isolated anymore, we should make sure
+# it doesn't accidentally pick up stuff from windows registry.
+file(WRITE "${PYTHON_DIR}/sitecustomize.py" [[import os
+import sys
+sys.path.insert(1, os.path.dirname(os.path.realpath(__file__)))
+]])
diff --git a/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake b/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake new file mode 100644 index 0000000..7752d7a --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_prettify_command_line.cmake @@ -0,0 +1,15 @@ +function(z_vcpkg_prettify_command_line out_var)
+ set(output_list "")
+ z_vcpkg_function_arguments(args 1)
+ foreach(v IN LISTS args)
+ string(REPLACE [[\]] [[\\]] v "${v}")
+ if(v MATCHES "( )")
+ string(REPLACE [["]] [[\"]] v "${v}")
+ list(APPEND output_list "\"${v}\"")
+ else()
+ list(APPEND output_list "${v}")
+ endif()
+ endforeach()
+ list(JOIN output_list " " output)
+ set("${out_var}" "${output}" PARENT_SCOPE)
+endfunction()
diff --git a/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake b/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake new file mode 100644 index 0000000..b1321c0 --- /dev/null +++ b/vcpkg/scripts/cmake/z_vcpkg_setup_pkgconfig_path.cmake @@ -0,0 +1,59 @@ +function(z_vcpkg_setup_pkgconfig_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "CONFIG" "")
+
+ if("${arg_CONFIG}" STREQUAL "")
+ message(FATAL_ERROR "CONFIG is required.")
+ endif()
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ if(DEFINED ENV{${envvar}})
+ set("z_vcpkg_env_backup_${envvar}" "$ENV{${envvar}}" PARENT_SCOPE)
+ else()
+ unset("z_vcpkg_env_backup_${envvar}" PARENT_SCOPE)
+ endif()
+ endforeach()
+
+ vcpkg_find_acquire_program(PKGCONFIG)
+ get_filename_component(pkgconfig_path "${PKGCONFIG}" DIRECTORY)
+ cmake_path(CONVERT "$ENV{PATH}" TO_CMAKE_PATH_LIST path_list NORMALIZE)
+ cmake_path(CONVERT "${pkgconfig_path}" TO_CMAKE_PATH_LIST pkgconfig_path NORMALIZE)
+ if(NOT "${pkgconfig_path}" IN_LIST path_list)
+ vcpkg_add_to_path("${pkgconfig_path}")
+ endif()
+ unset(path_list)
+ unset(pkgconfig_path)
+
+ set(ENV{PKG_CONFIG} "${PKGCONFIG}")
+
+ foreach(prefix IN ITEMS "${CURRENT_INSTALLED_DIR}" "${CURRENT_PACKAGES_DIR}")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/share/pkgconfig")
+ if(arg_CONFIG STREQUAL "RELEASE")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/lib/pkgconfig")
+ # search order is lib, share, external
+ elseif(arg_CONFIG STREQUAL "DEBUG")
+ vcpkg_host_path_list(PREPEND ENV{PKG_CONFIG_PATH} "${prefix}/debug/lib/pkgconfig")
+ # search order is debug/lib, share, external
+ else()
+ message(FATAL_ERROR "CONFIG must be either RELEASE or DEBUG.")
+ endif()
+ endforeach()
+ # total search order is current packages dir, current installed dir, external
+endfunction()
+
+function(z_vcpkg_restore_pkgconfig_path)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "" "")
+ if(DEFINED arg_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "${CMAKE_CURRENT_FUNCTION} was passed extra arguments: ${arg_UNPARSED_ARGUMENTS}")
+ endif()
+
+ foreach(envvar IN ITEMS PKG_CONFIG PKG_CONFIG_PATH)
+ if(DEFINED z_vcpkg_env_backup_${envvar})
+ set("ENV{${envvar}}" "${z_vcpkg_env_backup_${envvar}}")
+ else()
+ unset("ENV{${envvar}}")
+ endif()
+ endforeach()
+endfunction()
diff --git a/vcpkg/scripts/detect_compiler/CMakeLists.txt b/vcpkg/scripts/detect_compiler/CMakeLists.txt new file mode 100644 index 0000000..d695a9e --- /dev/null +++ b/vcpkg/scripts/detect_compiler/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.20)
+project(detect_compiler NONE)
+
+if(CMAKE_GENERATOR STREQUAL "Ninja" AND CMAKE_SYSTEM_NAME STREQUAL "Windows")
+ set(CMAKE_C_COMPILER_WORKS 1)
+ set(CMAKE_C_COMPILER_FORCED 1)
+ set(CMAKE_CXX_COMPILER_WORKS 1)
+ set(CMAKE_CXX_COMPILER_FORCED 1)
+endif()
+
+enable_language(C)
+enable_language(CXX)
+
+if(VCPKG_COMPILER_CACHE_FILE)
+ if(EXISTS "${VCPKG_COMPILER_CACHE_FILE}")
+ file(READ "${VCPKG_COMPILER_CACHE_FILE}" JSON_CONTENT)
+ else()
+ set(JSON_CONTENT "{}")
+ endif()
+
+ function(get_hash compiler_path out_var)
+ file(TO_CMAKE_PATH "${compiler_path}" "compiler_path")
+ file(SIZE "${compiler_path}" SIZE)
+ file(TIMESTAMP "${compiler_path}" TIMESTAMP "%s" UTC)
+
+ string(JSON COMPILER_EXISTS ERROR_VARIABLE JSON_ERROR GET "${JSON_CONTENT}" "${compiler_path}")
+ if(NOT JSON_ERROR)
+ # Get compiler attributes using JSON API
+ string(JSON SIZE_JSON GET "${JSON_CONTENT}" "${compiler_path}" "size")
+ string(JSON TIMESTAMP_JSON GET "${JSON_CONTENT}" "${compiler_path}" "timestamp")
+ string(JSON HASH_JSON GET "${JSON_CONTENT}" "${compiler_path}" "hash")
+ if ((SIZE_JSON EQUAL SIZE) AND (TIMESTAMP_JSON EQUAL TIMESTAMP))
+ set("${out_var}" "${HASH_JSON}" PARENT_SCOPE)
+ return()
+ endif()
+ endif()
+ file(SHA1 "${compiler_path}" HASH)
+ # Add new entry to JSON
+ string(JSON JSON_CONTENT SET "${JSON_CONTENT}" "${compiler_path}" "{\"size\": ${SIZE}, \"timestamp\": ${TIMESTAMP}, \"hash\": \"${HASH}\"}")
+ set("${out_var}" "${HASH}" PARENT_SCOPE)
+ set(JSON_CONTENT "${JSON_CONTENT}" PARENT_SCOPE)
+ endfunction()
+
+ get_hash("${CMAKE_C_COMPILER}" C_HASH)
+ get_hash("${CMAKE_CXX_COMPILER}" CXX_HASH)
+
+ # Write updated JSON back to file
+ file(WRITE "${VCPKG_COMPILER_CACHE_FILE}" "${JSON_CONTENT}")
+else()
+ file(SHA1 "${CMAKE_CXX_COMPILER}" CXX_HASH)
+ file(SHA1 "${CMAKE_C_COMPILER}" C_HASH)
+endif()
+string(SHA1 COMPILER_HASH "${C_HASH}${CXX_HASH}")
+
+message("#COMPILER_HASH#${COMPILER_HASH}")
+message("#COMPILER_C_HASH#${C_HASH}")
+message("#COMPILER_C_VERSION#${CMAKE_C_COMPILER_VERSION}")
+message("#COMPILER_C_ID#${CMAKE_C_COMPILER_ID}")
+message("#COMPILER_C_PATH#${CMAKE_C_COMPILER}")
+message("#COMPILER_CXX_HASH#${CXX_HASH}")
+message("#COMPILER_CXX_VERSION#${CMAKE_CXX_COMPILER_VERSION}")
+message("#COMPILER_CXX_ID#${CMAKE_CXX_COMPILER_ID}")
+message("#COMPILER_CXX_PATH#${CMAKE_CXX_COMPILER}")
diff --git a/vcpkg/scripts/detect_compiler/portfile.cmake b/vcpkg/scripts/detect_compiler/portfile.cmake new file mode 100644 index 0000000..f4d6d9c --- /dev/null +++ b/vcpkg/scripts/detect_compiler/portfile.cmake @@ -0,0 +1,31 @@ +set(LOGS
+ ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-out.log
+ ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-rel-out.log
+ ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-dbg-out.log
+ ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-rel-err.log
+ ${CURRENT_BUILDTREES_DIR}/config-${TARGET_TRIPLET}-dbg-err.log
+)
+
+foreach(LOG IN LISTS LOGS)
+ file(REMOVE ${LOG})
+ if(EXISTS ${LOG})
+ message(FATAL_ERROR "Could not remove ${LOG}")
+ endif()
+endforeach()
+
+set(VCPKG_BUILD_TYPE release)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}"
+ PREFER_NINJA
+ OPTIONS
+ "-DVCPKG_COMPILER_CACHE_FILE=${VCPKG_COMPILER_CACHE_FILE}"
+
+)
+
+foreach(LOG IN LISTS LOGS)
+ if(EXISTS ${LOG})
+ file(READ "${LOG}" _contents)
+ message("${_contents}")
+ endif()
+endforeach()
diff --git a/vcpkg/scripts/detect_compiler/vcpkg.json b/vcpkg/scripts/detect_compiler/vcpkg.json new file mode 100644 index 0000000..64979df --- /dev/null +++ b/vcpkg/scripts/detect_compiler/vcpkg.json @@ -0,0 +1,5 @@ +{ + "name": "detect-compiler", + "version": "0", + "description": "None" +} diff --git a/vcpkg/scripts/generateBaseline.py b/vcpkg/scripts/generateBaseline.py new file mode 100644 index 0000000..6488b54 --- /dev/null +++ b/vcpkg/scripts/generateBaseline.py @@ -0,0 +1,82 @@ +import os
+import sys
+import json
+import time
+
+from pathlib import Path
+
+
+SCRIPT_DIRECTORY = os.path.dirname(os.path.abspath(__file__))
+PORTS_DIRECTORY = os.path.join(SCRIPT_DIRECTORY, '../ports')
+VERSIONS_DB_DIRECTORY = os.path.join(SCRIPT_DIRECTORY, '../versions')
+
+
+def get_version_tag(version):
+ if 'version' in version:
+ return version['version']
+ elif 'version-date' in version:
+ return version['version-date']
+ elif 'version-semver' in version:
+ return version['version-semver']
+ elif 'version-string' in version:
+ return version['version-string']
+ sys.exit(1)
+
+
+def get_version_port_version(version):
+ if 'port-version' in version:
+ return version['port-version']
+ return 0
+
+
+def generate_baseline():
+ start_time = time.time()
+
+ # Assume each directory in ${VCPKG_ROOT}/ports is a different port
+ port_names = [item for item in os.listdir(
+ PORTS_DIRECTORY) if os.path.isdir(os.path.join(PORTS_DIRECTORY, item))]
+ port_names.sort()
+
+ baseline_entries = {}
+ total_count = len(port_names)
+ for i, port_name in enumerate(port_names, 1):
+ port_file_path = os.path.join(
+ VERSIONS_DB_DIRECTORY, f'{port_name[0]}-', f'{port_name}.json')
+
+ if not os.path.exists(port_file_path):
+ print(
+ f'Error: No version file for {port_name}.\n', file=sys.stderr)
+ continue
+ sys.stderr.write(
+ f'\rProcessed {i}/{total_count} ({i/total_count:.2%})')
+ with open(port_file_path, 'r') as db_file:
+ try:
+ versions_object = json.load(db_file)
+ if versions_object['versions']:
+ last_version = versions_object['versions'][0]
+ baseline_entries[port_name] = {
+ 'baseline': get_version_tag(last_version),
+ 'port-version': get_version_port_version(last_version)
+ }
+ except json.JSONDecodeError as e:
+ print(f'Error: Decoding {port_file_path}\n{e}\n')
+ baseline_object = {}
+ baseline_object['default'] = baseline_entries
+
+ os.makedirs(VERSIONS_DB_DIRECTORY, exist_ok=True)
+ baseline_path = os.path.join(VERSIONS_DB_DIRECTORY, 'baseline.json')
+ with open(baseline_path, 'w') as baseline_file:
+ json.dump(baseline_object, baseline_file)
+
+ elapsed_time = time.time() - start_time
+ print(f'\nElapsed time: {elapsed_time:.2f} seconds')
+
+
+def main():
+ if not os.path.exists(VERSIONS_DB_DIRECTORY):
+ print(f'Version DB files must exist before generating a baseline.\nRun: `python generatePortVersionsDB`\n')
+ generate_baseline()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/vcpkg/scripts/generatePortVersionsDb.py b/vcpkg/scripts/generatePortVersionsDb.py new file mode 100644 index 0000000..d35e51b --- /dev/null +++ b/vcpkg/scripts/generatePortVersionsDb.py @@ -0,0 +1,87 @@ +import os
+import sys
+import subprocess
+import json
+import time
+import shutil
+
+import multiprocessing
+
+from pathlib import Path
+
+
+MAX_PROCESSES = multiprocessing.cpu_count()
+SCRIPT_DIRECTORY = os.path.dirname(os.path.abspath(__file__))
+PORTS_DIRECTORY = os.path.join(SCRIPT_DIRECTORY, '../ports')
+VERSIONS_DB_DIRECTORY = os.path.join(SCRIPT_DIRECTORY, '../versions')
+
+
+def get_current_git_ref():
+ output = subprocess.run(['git', '-C', SCRIPT_DIRECTORY, 'rev-parse', '--verify', 'HEAD'],
+ capture_output=True,
+ encoding='utf-8')
+ if output.returncode == 0:
+ return output.stdout.strip()
+ print(f"Failed to get git ref:", output.stderr.strip(), file=sys.stderr)
+ return None
+
+
+def generate_versions_file(port_name):
+ containing_dir = os.path.join(VERSIONS_DB_DIRECTORY, f'{port_name[0]}-')
+ os.makedirs(containing_dir, exist_ok=True)
+
+ output_file_path = os.path.join(containing_dir, f'{port_name}.json')
+ if not os.path.exists(output_file_path):
+ env = os.environ.copy()
+ env['GIT_OPTIONAL_LOCKS'] = '0'
+ output = subprocess.run(
+ [os.path.join(SCRIPT_DIRECTORY, '../vcpkg'),
+ 'x-history', port_name, '--x-json', f'--output={output_file_path}'],
+ capture_output=True, encoding='utf-8', env=env)
+ if output.returncode != 0:
+ print(f'x-history {port_name} failed: ',
+ output.stdout.strip(), file=sys.stderr)
+
+
+def generate_versions_db(revision):
+ start_time = time.time()
+
+ # Assume each directory in ${VCPKG_ROOT}/ports is a different port
+ port_names = [item for item in os.listdir(
+ PORTS_DIRECTORY) if os.path.isdir(os.path.join(PORTS_DIRECTORY, item))]
+ total_count = len(port_names)
+
+ concurrency = MAX_PROCESSES / 2
+ print(f'Running {concurrency:.0f} parallel processes')
+ process_pool = multiprocessing.Pool(MAX_PROCESSES)
+ for i, _ in enumerate(process_pool.imap_unordered(generate_versions_file, port_names), 1):
+ sys.stderr.write(
+ f'\rProcessed: {i}/{total_count} ({(i / total_count):.2%})')
+ process_pool.close()
+ process_pool.join()
+
+ # Generate timestamp
+ rev_file = os.path.join(VERSIONS_DB_DIRECTORY, revision)
+ Path(rev_file).touch()
+
+ elapsed_time = time.time() - start_time
+ print(
+ f'\nElapsed time: {elapsed_time:.2f} seconds')
+
+
+def main():
+ revision = get_current_git_ref()
+ if not revision:
+ print('Couldn\'t fetch current Git revision', file=sys.stderr)
+ sys.exit(1)
+
+ rev_file = os.path.join(VERSIONS_DB_DIRECTORY, revision)
+ if os.path.exists(rev_file):
+ print(f'Database files already exist for commit {revision}')
+ sys.exit(0)
+
+ generate_versions_db(revision)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/vcpkg/scripts/get_cmake_vars/CMakeLists.txt b/vcpkg/scripts/get_cmake_vars/CMakeLists.txt new file mode 100644 index 0000000..7e5ddbd --- /dev/null +++ b/vcpkg/scripts/get_cmake_vars/CMakeLists.txt @@ -0,0 +1,225 @@ +cmake_minimum_required(VERSION 3.20)
+
+if(NOT VCPKG_OUTPUT_FILE)
+ message(FATAL_ERROR "VCPKG_OUTPUT_FILE is required to be defined")
+endif()
+
+if(NOT CMAKE_BUILD_TYPE)
+ message(FATAL_ERROR "CMAKE_BUILD_TYPE is required to be defined")
+else()
+ string(TOUPPER "${CMAKE_BUILD_TYPE}" VCPKG_CONFIGS)
+endif()
+
+set(VCPKG_LANGUAGES "C;CXX" CACHE STRING "Languages to enables for this project")
+if(VCPKG_ENABLE_OBJC)
+ list(APPEND VCPKG_LANGUAGES "OBJC")
+endif()
+
+project(get_cmake_vars LANGUAGES ${VCPKG_LANGUAGES})
+
+
+set(OUTPUT_STRING "# Generator: ${CMAKE_CURRENT_LIST_FILE}\n")
+
+function(escaped out_var value)
+ string(REPLACE "\\" "\\\\" value "${value}")
+ string(REPLACE "\"" "\\\"" value "${value}")
+ string(REPLACE "\$" "\\\$" value "${value}")
+ set(${out_var} "${value}" PARENT_SCOPE)
+endfunction()
+
+# Build default checklists
+list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_CROSSCOMPILING
+ CMAKE_SYSTEM_NAME
+ CMAKE_HOST_SYSTEM_NAME
+ CMAKE_SYSTEM_PROCESSOR
+ CMAKE_HOST_SYSTEM_PROCESSOR)
+if(APPLE)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_OSX_DEPLOYMENT_TARGET
+ CMAKE_OSX_SYSROOT)
+endif()
+# Programs to check
+set(PROGLIST AR RANLIB STRIP NM OBJDUMP DLLTOOL MT LINKER)
+foreach(prog IN LISTS PROGLIST)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${prog})
+endforeach()
+set(COMPILERS ${VCPKG_LANGUAGES} RC)
+foreach(prog IN LISTS COMPILERS)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${prog}_COMPILER CMAKE_${prog}_COMPILER_ID CMAKE_${prog}_COMPILER_FRONTEND_VARIANT)
+endforeach()
+# Variables to check
+foreach(_lang IN LISTS VCPKG_LANGUAGES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD_INCLUDE_DIRECTORIES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD_LIBRARIES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_STANDARD)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_COMPILE_FEATURES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_EXTENSION)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES)
+ list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_COMPILER_TARGET)
+
+ # Probably never required since implicit.
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES)
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_INCLUDE_DIRECTORIES)
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_DIRECTORIES)
+ #list(APPEND VCPKG_DEFAULT_VARS_TO_CHECK CMAKE_${_lang}_IMPLICIT_LINK_LIBRARIES)
+endforeach()
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_VARS_TO_CHECK)
+
+# Environment variables to check.
+list(APPEND VCPKG_DEFAULT_ENV_VARS_TO_CHECK PATH INCLUDE C_INCLUDE_PATH CPLUS_INCLUDE_PATH LIB LIBPATH LIBRARY_PATH LD_LIBRARY_PATH)
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_ENV_VARS_TO_CHECK)
+
+#Flags to check. Flags are a bit special since they are configuration aware.
+set(FLAGS ${VCPKG_LANGUAGES} RC SHARED_LINKER STATIC_LINKER EXE_LINKER MODULE_LINKER)
+foreach(flag IN LISTS FLAGS)
+ list(APPEND VCPKG_DEFAULT_FLAGS_TO_CHECK CMAKE_${flag}_FLAGS)
+endforeach()
+list(REMOVE_DUPLICATES VCPKG_DEFAULT_FLAGS_TO_CHECK)
+
+#Language-specific flags.
+foreach(_lang IN LISTS VCPKG_LANGUAGES)
+ list(APPEND VCPKG_LANG_FLAGS CMAKE_${_lang}_FLAGS)
+endforeach()
+list(REMOVE_DUPLICATES VCPKG_LANG_FLAGS)
+
+# TODO if ever necessary: Properties to check
+
+set(VCPKG_VAR_PREFIX "VCPKG_DETECTED" CACHE STRING "Variable prefix to use for detected flags")
+set(VCPKG_VARS_TO_CHECK "${VCPKG_DEFAULT_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
+set(VCPKG_FLAGS_TO_CHECK "${VCPKG_DEFAULT_FLAGS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
+set(VCPKG_ENV_VARS_TO_CHECK "${VCPKG_DEFAULT_ENV_VARS_TO_CHECK}" CACHE STRING "Variables to check. If not given there is a list of defaults")
+
+foreach(VAR IN LISTS VCPKG_VARS_TO_CHECK)
+ escaped(value "${${VAR}}")
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${VAR} \"${value}\")\n")
+endforeach()
+
+foreach(_env IN LISTS VCPKG_ENV_VARS_TO_CHECK)
+ if(CMAKE_HOST_WIN32)
+ string(REPLACE "\\" "/" value "$ENV{${_env}}")
+ escaped(value "${value}")
+ else()
+ escaped(value "$ENV{${_env}}")
+ endif()
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_ENV_${_env} \"${value}\")\n")
+endforeach()
+
+set(extra_flags "")
+if(CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN)
+ if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
+ string(APPEND extra_flags " \"${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN}${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}\"")
+ else()
+ string(APPEND extra_flags " ${CMAKE_CXX_COMPILE_OPTIONS_EXTERNAL_TOOLCHAIN} \"${CMAKE_CXX_COMPILER_EXTERNAL_TOOLCHAIN}\"")
+ endif()
+endif()
+
+set(extra_flags_compile "")
+set(extra_flags_link "")
+if(CMAKE_CXX_COMPILE_OPTIONS_SYSROOT)
+ if(CMAKE_SYSROOT_COMPILE)
+ string(APPEND extra_flags_compile " \"${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_COMPILE}\"")
+ elseif(CMAKE_SYSROOT)
+ string(APPEND extra_flags_compile " \"${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}\"")
+ endif()
+
+ if(CMAKE_SYSROOT_LINK)
+ string(APPEND extra_flags_link " \"${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT_LINK}\"")
+ elseif(CMAKE_SYSROOT)
+ string(APPEND extra_flags_link " \"${CMAKE_CXX_COMPILE_OPTIONS_SYSROOT}${CMAKE_SYSROOT}\"")
+ endif()
+endif()
+
+macro(_vcpkg_adjust_flags flag_var)
+ if(MSVC) # Transform MSVC /flags to -flags due to msys2 runtime intepreting /flag as a path.
+ string(REGEX REPLACE "(^| )/" "\\1-" ${flag_var} "${${flag_var}}")
+ if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ if("${flag_var}" STREQUAL "CMAKE_CXX_FLAGS")
+ string(APPEND ${flag_var} " -ZW:nostdlib")
+ endif()
+ endif()
+ endif()
+ if(APPLE)
+ set(flags_to_add_osx_arch_sysroot "${VCPKG_LANG_FLAGS}" CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS)
+ if("${flag_var}" IN_LIST flags_to_add_osx_arch_sysroot)
+ # macOS - append arch and isysroot if cross-compiling
+ if(NOT "${CMAKE_OSX_ARCHITECTURES}" STREQUAL "${CMAKE_HOST_SYSTEM_PROCESSOR}")
+ foreach(arch IN LISTS CMAKE_OSX_ARCHITECTURES)
+ string(APPEND ${flag_var} " -arch ${arch}")
+ endforeach()
+ endif()
+ if(CMAKE_OSX_SYSROOT)
+ string(APPEND ${flag_var} " -isysroot \"${CMAKE_OSX_SYSROOT}\"")
+ endif()
+ if (CMAKE_OSX_DEPLOYMENT_TARGET)
+ list(GET VCPKG_LANGUAGES 0 lang)
+ string(APPEND ${flag_var} " ${CMAKE_${lang}_OSX_DEPLOYMENT_TARGET_FLAG}${CMAKE_OSX_DEPLOYMENT_TARGET}")
+ unset(lang)
+ endif()
+ endif()
+ unset(flags_to_add_osx_arch_sysroot)
+ endif()
+ set(flags_to_add_target_compile "${VCPKG_LANG_FLAGS}")
+ set(flags_to_add_target_link CMAKE_SHARED_LINKER_FLAGS CMAKE_MODULE_LINKER_FLAGS CMAKE_EXE_LINKER_FLAGS)
+ set(flags_to_add_target "${flags_to_add_target_compile}" "${flags_to_add_target_link}")
+ list(GET VCPKG_LANGUAGES 0 lang)
+ if(CMAKE_${lang}_COMPILER_TARGET AND "${flag_var}" IN_LIST flags_to_add_target)
+ if (CMAKE_${lang}_COMPILER_ID STREQUAL Clang)
+ string(PREPEND ${flag_var} "${CMAKE_${lang}_COMPILE_OPTIONS_TARGET}${CMAKE_${lang}_COMPILER_TARGET} ")
+ elseif(CMAKE_${lang}_COMPILE_OPTIONS_TARGET)
+ string(PREPEND ${flag_var} "${CMAKE_${lang}_COMPILE_OPTIONS_TARGET} ${CMAKE_${lang}_COMPILER_TARGET} ")
+ endif()
+ endif()
+ if("${flag_var}" IN_LIST flags_to_add_target)
+ string(APPEND ${flag_var} " ${extra_flags}")
+ endif()
+ if("${flag_var}" IN_LIST flags_to_add_target_compile)
+ string(APPEND ${flag_var} " ${extra_flags_compile}")
+ endif()
+ if("${flag_var}" IN_LIST flags_to_add_target_link)
+ string(APPEND ${flag_var} " ${extra_flags_link}")
+ endif()
+ unset(lang)
+ unset(flags_to_add_target)
+endmacro()
+
+foreach(flag IN LISTS VCPKG_FLAGS_TO_CHECK)
+ string(STRIP "${${flag}}" ${flag}) # Strip leading and trailing whitespaces
+ _vcpkg_adjust_flags(${flag})
+ escaped(value "${${flag}}")
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag} \" ${value}\")\n")
+ foreach(config IN LISTS VCPKG_CONFIGS)
+ escaped(raw_value "${CMAKE_${flag}_FLAGS_${config}}")
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_RAW_${flag}_${config} \"${raw_value}\")\n")
+ string(STRIP "${${flag}_${config}}" ${flag}_${config})
+ _vcpkg_adjust_flags(${flag}_${config})
+ escaped(combined_value "${${flag}} ${${flag}_${config}}")
+ string(STRIP "${combined_value}" combined_value)
+ string(APPEND OUTPUT_STRING "set(${VCPKG_VAR_PREFIX}_${flag}_${config} \"${combined_value}\")\n")
+ endforeach()
+endforeach()
+
+file(WRITE "${VCPKG_OUTPUT_FILE}" "${OUTPUT_STRING}")
+
+# Programs:
+# CMAKE_AR
+# CMAKE_<LANG>_COMPILER_AR (Wrapper)
+# CMAKE_RANLIB
+# CMAKE_<LANG>_COMPILER_RANLIB
+# CMAKE_STRIP
+# CMAKE_NM
+# CMAKE_OBJDUMP
+# CMAKE_DLLTOOL
+# CMAKE_MT
+# CMAKE_LINKER
+# CMAKE_C_COMPILER
+# CMAKE_CXX_COMPILER
+# CMAKE_RC_COMPILER
+
+# Flags:
+# CMAKE_<LANG>_FLAGS
+# CMAKE_<LANG>_FLAGS_<CONFIG>
+# CMAKE_RC_FLAGS
+# CMAKE_SHARED_LINKER_FLAGS
+# CMAKE_STATIC_LINKER_FLAGS
+# CMAKE_STATIC_LINKER_FLAGS_<CONFIG>
+# CMAKE_EXE_LINKER_FLAGS
+# CMAKE_EXE_LINKER_FLAGS_<CONFIG>
diff --git a/vcpkg/scripts/ifw/maintenance.qs b/vcpkg/scripts/ifw/maintenance.qs new file mode 100644 index 0000000..5cdad72 --- /dev/null +++ b/vcpkg/scripts/ifw/maintenance.qs @@ -0,0 +1,46 @@ +// constructor +function Component() +{ + installer.installationStarted.connect(this, Component.prototype.onInstallationStarted); +} + +Component.prototype.onInstallationStarted = function() +{ + if (component.updateRequested() || component.installationRequested()) { + if (installer.value("os") == "win") + component.installerbaseBinaryPath = "@TargetDir@/tempmaintenancetool.exe"; + installer.setInstallerBaseBinary(component.installerbaseBinaryPath); + } +} + +Component.prototype.createOperations = function() +{ + // call the base createOperations + component.createOperations(); + + // only for windows online installer + if ( installer.value("os") == "win" && !installer.isOfflineOnly() ) + { + // shortcut to add or remove packages + component.addOperation( "CreateShortcut", + "@TargetDir@/maintenancetool.exe", + "@StartMenuDir@/Manage vcpkg.lnk", + " --manage-packages"); + // shortcut to update packages + component.addOperation( "CreateShortcut", + "@TargetDir@/maintenancetool.exe", + "@StartMenuDir@/Update vcpkg.lnk", + " --updater"); + } + + // create uninstall link only for windows + if (installer.value("os") == "win") + { + // shortcut to uninstaller + component.addOperation( "CreateShortcut", + "@TargetDir@/maintenancetool.exe", + "@StartMenuDir@/Uninstall vcpkg.lnk", + " --uninstall"); + } +} + diff --git a/vcpkg/scripts/ports.cmake b/vcpkg/scripts/ports.cmake new file mode 100644 index 0000000..87db34d --- /dev/null +++ b/vcpkg/scripts/ports.cmake @@ -0,0 +1,265 @@ +cmake_minimum_required(VERSION 3.21) +if(POLICY CMP0174) + # Use CMake 3.31 behavior for cmake_parse_arguments(PARSE_ARGV) + cmake_policy(SET CMP0174 NEW) +endif() +if(CMAKE_VERSION VERSION_GREATER_EQUAL "4.0") + set(ENV{CMAKE_POLICY_VERSION_MINIMUM} 3.5) +endif() + +# Remove CMAKE_ variables from the script call +foreach(i RANGE 0 "${CMAKE_ARGC}") + unset(CMAKE_ARGV${i}) +endforeach() +unset(CMAKE_ARGN) +unset(CMAKE_ARGC) +unset(i) +# These don't make sense in script context +unset(CMAKE_BINARY_DIR) +unset(CMAKE_SOURCE_DIR) +unset(CMAKE_CURRENT_BINARY_DIR) +unset(CMAKE_CURRENT_SOURCE_DIR) +unset(CMAKE_FILES_DIRECTORY) +# Minimum CMake version is forced within vcpkg +unset(CMAKE_MINIMUM_REQUIRED_VERSION) +# CMAKE_VERSION is enough for doing version checks +unset(CMAKE_MAJOR_VERSION) +unset(CMAKE_MINOR_VERSION) +unset(CMAKE_PATCH_VERSION) +unset(CMAKE_TWEAK_VERSION) + +set(SCRIPTS "${CMAKE_CURRENT_LIST_DIR}" CACHE PATH "Location to stored scripts") +list(APPEND CMAKE_MODULE_PATH "${SCRIPTS}/cmake") + +# Increment this number if we intentionally need to invalidate all binary caches due a change in +# the following scripts: 1 +include("${SCRIPTS}/cmake/execute_process.cmake") +include("${SCRIPTS}/cmake/vcpkg_acquire_msys.cmake") +include("${SCRIPTS}/cmake/vcpkg_add_to_path.cmake") +include("${SCRIPTS}/cmake/vcpkg_apply_patches.cmake") +include("${SCRIPTS}/cmake/vcpkg_backup_restore_env_vars.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_cmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_make.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_msbuild.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_ninja.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_nmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_build_qmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_buildpath_length_warning.cmake") +include("${SCRIPTS}/cmake/vcpkg_check_features.cmake") +include("${SCRIPTS}/cmake/vcpkg_check_linkage.cmake") +include("${SCRIPTS}/cmake/vcpkg_clean_executables_in_bin.cmake") +include("${SCRIPTS}/cmake/vcpkg_clean_msbuild.cmake") +include("${SCRIPTS}/cmake/vcpkg_configure_cmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_configure_gn.cmake") +include("${SCRIPTS}/cmake/vcpkg_configure_make.cmake") +include("${SCRIPTS}/cmake/vcpkg_configure_meson.cmake") +include("${SCRIPTS}/cmake/vcpkg_configure_qmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_copy_pdbs.cmake") +include("${SCRIPTS}/cmake/vcpkg_copy_tool_dependencies.cmake") +include("${SCRIPTS}/cmake/vcpkg_copy_tools.cmake") +include("${SCRIPTS}/cmake/vcpkg_download_distfile.cmake") +include("${SCRIPTS}/cmake/vcpkg_download_sourceforge.cmake") +include("${SCRIPTS}/cmake/vcpkg_execute_build_process.cmake") +include("${SCRIPTS}/cmake/vcpkg_execute_required_process.cmake") +include("${SCRIPTS}/cmake/vcpkg_execute_required_process_repeat.cmake") +include("${SCRIPTS}/cmake/vcpkg_extract_archive.cmake") +include("${SCRIPTS}/cmake/vcpkg_extract_source_archive.cmake") +include("${SCRIPTS}/cmake/vcpkg_extract_source_archive_ex.cmake") +include("${SCRIPTS}/cmake/vcpkg_fail_port_install.cmake") +include("${SCRIPTS}/cmake/vcpkg_find_acquire_program.cmake") +include("${SCRIPTS}/cmake/vcpkg_fixup_cmake_targets.cmake") +include("${SCRIPTS}/cmake/vcpkg_fixup_pkgconfig.cmake") +include("${SCRIPTS}/cmake/vcpkg_from_bitbucket.cmake") +include("${SCRIPTS}/cmake/vcpkg_from_git.cmake") +include("${SCRIPTS}/cmake/vcpkg_from_github.cmake") +include("${SCRIPTS}/cmake/vcpkg_from_gitlab.cmake") +include("${SCRIPTS}/cmake/vcpkg_from_sourceforge.cmake") +include("${SCRIPTS}/cmake/vcpkg_get_program_files_platform_bitness.cmake") +include("${SCRIPTS}/cmake/vcpkg_get_windows_sdk.cmake") +include("${SCRIPTS}/cmake/vcpkg_host_path_list.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_cmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_copyright.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_gn.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_make.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_meson.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_msbuild.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_nmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_install_qmake.cmake") +include("${SCRIPTS}/cmake/vcpkg_list.cmake") +include("${SCRIPTS}/cmake/vcpkg_minimum_required.cmake") +include("${SCRIPTS}/cmake/vcpkg_replace_string.cmake") +include("${SCRIPTS}/cmake/vcpkg_test_cmake.cmake") + +include("${SCRIPTS}/cmake/z_vcpkg_apply_patches.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_forward_output_variable.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_function_arguments.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_get_cmake_vars.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_prettify_command_line.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_setup_pkgconfig_path.cmake") + +include("${SCRIPTS}/cmake/z_vcpkg_fixup_rpath.cmake") +include("${SCRIPTS}/cmake/z_vcpkg_fixup_rpath_macho.cmake") + +function(debug_message) + if(PORT_DEBUG) + z_vcpkg_function_arguments(ARGS) + list(JOIN ARGS " " ARG_STRING) + message(STATUS "[DEBUG] " "${ARG_STRING}") + endif() +endfunction() +function(z_vcpkg_deprecation_message) + z_vcpkg_function_arguments(ARGS) + list(JOIN ARGS " " ARG_STRING) + message(DEPRECATION "${ARG_STRING}") +endfunction() + +option(_VCPKG_PROHIBIT_BACKCOMPAT_FEATURES "Controls whether use of a backcompat only support feature fails the build.") +if (_VCPKG_PROHIBIT_BACKCOMPAT_FEATURES) + set(Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL "FATAL_ERROR") +else() + set(Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL "WARNING") +endif() + +vcpkg_minimum_required(VERSION 2022-10-12) + +file(TO_CMAKE_PATH "${BUILDTREES_DIR}" BUILDTREES_DIR) +file(TO_CMAKE_PATH "${PACKAGES_DIR}" PACKAGES_DIR) + +set(CURRENT_INSTALLED_DIR "${_VCPKG_INSTALLED_DIR}/${TARGET_TRIPLET}" CACHE PATH "Location to install final packages") + +if(DEFINED CURRENT_BUILDTREES_DIR) + file(TO_CMAKE_PATH "${CURRENT_BUILDTREES_DIR}" CURRENT_BUILDTREES_DIR) +elseif(PORT) + set(CURRENT_BUILDTREES_DIR "${BUILDTREES_DIR}/${PORT}") +endif() + +if(DEFINED CURRENT_PACKAGES_DIR) + file(TO_CMAKE_PATH "${CURRENT_PACKAGES_DIR}" CURRENT_PACKAGES_DIR) +elseif(PORT) + set(CURRENT_PACKAGES_DIR "${PACKAGES_DIR}/${PORT}_${TARGET_TRIPLET}") +endif() + +if(CMD STREQUAL "BUILD") + set(CMAKE_TRIPLET_FILE "${TARGET_TRIPLET_FILE}") + if(NOT EXISTS "${CMAKE_TRIPLET_FILE}") + message(FATAL_ERROR "Unsupported target triplet. Triplet file does not exist: ${CMAKE_TRIPLET_FILE}") + endif() + + if(NOT DEFINED CURRENT_PORT_DIR) + message(FATAL_ERROR "CURRENT_PORT_DIR was not defined") + endif() + file(TO_CMAKE_PATH "${CURRENT_PORT_DIR}" CURRENT_PORT_DIR) + if(NOT EXISTS "${CURRENT_PORT_DIR}") + message(FATAL_ERROR "Cannot find port: ${PORT}\n Directory does not exist: ${CURRENT_PORT_DIR}") + endif() + if(NOT EXISTS "${CURRENT_PORT_DIR}/portfile.cmake") + message(FATAL_ERROR "Port is missing portfile: ${CURRENT_PORT_DIR}/portfile.cmake") + endif() + if(NOT EXISTS "${CURRENT_PORT_DIR}/CONTROL" AND NOT EXISTS "${CURRENT_PORT_DIR}/vcpkg.json") + message(FATAL_ERROR "Port is missing control or manifest file: ${CURRENT_PORT_DIR}/{CONTROL,vcpkg.json}") + endif() + + unset(PACKAGES_DIR) + unset(BUILDTREES_DIR) + + if(EXISTS "${CURRENT_PACKAGES_DIR}") + file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}") + if(EXISTS "${CURRENT_PACKAGES_DIR}") + message(FATAL_ERROR "Unable to remove directory: ${CURRENT_PACKAGES_DIR}\n Files are likely in use.") + endif() + endif() + file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}" "${CURRENT_PACKAGES_DIR}") + + include("${CMAKE_TRIPLET_FILE}") + + set(HOST_TRIPLET "${_HOST_TRIPLET}") + set(CURRENT_HOST_INSTALLED_DIR "${_VCPKG_INSTALLED_DIR}/${HOST_TRIPLET}" CACHE PATH "Location to install final packages for the host") + + set(TRIPLET_SYSTEM_ARCH "${VCPKG_TARGET_ARCHITECTURE}") + include("${SCRIPTS}/cmake/vcpkg_common_definitions.cmake") + + function(z_vcpkg_warn_ambiguous_system_variables VARIABLE ACCESS VALUE POS STACK) + message("${Z_VCPKG_BACKCOMPAT_MESSAGE_LEVEL}" "Unexpected ${ACCESS} on variable ${VARIABLE} in script mode. +This variable name insufficiently expresses whether it refers to the \ +target system or to the host system. Use a prefixed variable instead. +- Variables providing information about the host: + CMAKE_HOST_<SYSTEM> + VCPKG_HOST_IS_<SYSTEM> +- Variables providing information about the target: + VCPKG_TARGET_IS_<SYSTEM> + VCPKG_DETECTED_<VARIABLE> (using vcpkg_cmake_get_vars) +") + endfunction() + foreach(var IN ITEMS ANDROID APPLE BSD IOS LINUX MINGW MSVC UNIX WIN32) + variable_watch("${var}" z_vcpkg_warn_ambiguous_system_variables) + endforeach() + + if (DEFINED VCPKG_PORT_CONFIGS) + foreach(VCPKG_PORT_CONFIG IN LISTS VCPKG_PORT_CONFIGS) + include("${VCPKG_PORT_CONFIG}") + endforeach() + endif() + + set(Z_VCPKG_ERROR_LOG_COLLECTION_FILE "${CURRENT_BUILDTREES_DIR}/error-logs-${TARGET_TRIPLET}.txt") + file(REMOVE "${Z_VCPKG_ERROR_LOG_COLLECTION_FILE}") + + include("${CURRENT_PORT_DIR}/portfile.cmake") + + foreach(z_post_portfile_include IN LISTS Z_VCPKG_POST_PORTFILE_INCLUDES) + include("${z_post_portfile_include}") + endforeach() + unset(z_post_portfile_include) + + if(DEFINED PORT) + # Always fixup RPATH on linux, osx and bsds unless explicitly disabled. + if(VCPKG_FIXUP_ELF_RPATH OR ((VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_BSD) AND NOT DEFINED VCPKG_FIXUP_ELF_RPATH)) + z_vcpkg_fixup_rpath_in_dir() + endif() + if(VCPKG_FIXUP_MACHO_RPATH OR (VCPKG_TARGET_IS_OSX AND NOT DEFINED VCPKG_FIXUP_MACHO_RPATH)) + z_vcpkg_fixup_macho_rpath_in_dir() + endif() + include("${SCRIPTS}/build_info.cmake") + endif() +elseif(CMD STREQUAL "CREATE") + if(NOT DEFINED PORT_PATH) + set(PORT_PATH "${VCPKG_ROOT_DIR}/ports/${PORT}") + endif() + file(TO_NATIVE_PATH "${PORT_PATH}" NATIVE_PORT_PATH) + set(PORTFILE_PATH "${PORT_PATH}/portfile.cmake") + file(TO_NATIVE_PATH "${PORTFILE_PATH}" NATIVE_PORTFILE_PATH) + set(MANIFEST_PATH "${PORT_PATH}/vcpkg.json") + file(TO_NATIVE_PATH "${MANIFEST_PATH}" NATIVE_MANIFEST_PATH) + + if(EXISTS "${PORTFILE_PATH}") + message(FATAL_ERROR "Portfile already exists: '${NATIVE_PORTFILE_PATH}'") + endif() + if(NOT FILENAME) + get_filename_component(FILENAME "${URL}" NAME) + endif() + string(REGEX REPLACE "(\\.(zip|gz|tar|tgz|bz2))+\$" "" ROOT_NAME "${FILENAME}") + + set(DOWNLOAD_PATH "${DOWNLOADS}/${FILENAME}") + file(TO_NATIVE_PATH "${DOWNLOAD_PATH}" NATIVE_DOWNLOAD_PATH) + + if(EXISTS "${DOWNLOAD_PATH}") + message(STATUS "Using pre-downloaded: ${NATIVE_DOWNLOAD_PATH}") + message(STATUS "If this is not desired, delete the file and ${NATIVE_PORT_PATH}") + else() + message(STATUS "Downloading ${URL} -> ${FILENAME}...") + file(DOWNLOAD "${URL}" "${DOWNLOAD_PATH}" STATUS download_status) + list(GET download_status 0 status_code) + if(NOT "${status_code}" EQUAL "0") + message(FATAL_ERROR "Downloading ${URL}... Failed. Status: ${download_status}") + endif() + endif() + file(SHA512 "${DOWNLOAD_PATH}" SHA512) + + file(MAKE_DIRECTORY "${PORT_PATH}") + configure_file("${SCRIPTS}/templates/portfile.in.cmake" "${PORTFILE_PATH}" @ONLY) + configure_file("${SCRIPTS}/templates/vcpkg.json.in" "${MANIFEST_PATH}" @ONLY) + + message(STATUS "Generated portfile: ${NATIVE_PORTFILE_PATH}") + message(STATUS "Generated manifest: ${NATIVE_MANIFEST_PATH}") + message(STATUS "To launch an editor for these new files, run") + message(STATUS " .\\vcpkg edit ${PORT}") +endif() diff --git a/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psd1 b/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psd1 new file mode 100644 index 0000000..33a0765 --- /dev/null +++ b/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psd1 @@ -0,0 +1,250 @@ +@{
+
+# Script module or binary module file associated with this manifest.
+RootModule = 'posh-vcpkg.psm1'
+
+# Version number of this module.
+ModuleVersion = '0.0.2'
+
+# ID used to uniquely identify this module
+GUID = '948f02ab-fc99-4a53-8335-b6556eef129b'
+
+# Minimum version of the PowerShell engine required by this module
+PowerShellVersion = '5.1'
+
+FunctionsToExport = @()
+CmdletsToExport = @()
+VariablesToExport = @()
+AliasesToExport = @()
+
+# Private data to pass to the module specified in RootModule/ModuleToProcess.
+# This may also contain a PSData hashtable with additional module metadata used by PowerShell.
+PrivateData =
+@{
+ PSData =
+ @{
+ # Tags applied to this module. These help with module discovery in online galleries.
+ Tags = @('vcpkg', 'tab', 'tab-completion', 'Register-ArgumentCompleter')
+ }
+}
+
+}
+
+# SIG # Begin signature block
+# MIIoVQYJKoZIhvcNAQcCoIIoRjCCKEICAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCBhs5lsXR9slHzB
+# kYzN1OwRfrUUbZwdFarIAd9OllzrdaCCDYUwggYDMIID66ADAgECAhMzAAAEA73V
+# lV0POxitAAAAAAQDMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTEzWhcNMjUwOTExMjAxMTEzWjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQCfdGddwIOnbRYUyg03O3iz19XXZPmuhEmW/5uyEN+8mgxl+HJGeLGBR8YButGV
+# LVK38RxcVcPYyFGQXcKcxgih4w4y4zJi3GvawLYHlsNExQwz+v0jgY/aejBS2EJY
+# oUhLVE+UzRihV8ooxoftsmKLb2xb7BoFS6UAo3Zz4afnOdqI7FGoi7g4vx/0MIdi
+# kwTn5N56TdIv3mwfkZCFmrsKpN0zR8HD8WYsvH3xKkG7u/xdqmhPPqMmnI2jOFw/
+# /n2aL8W7i1Pasja8PnRXH/QaVH0M1nanL+LI9TsMb/enWfXOW65Gne5cqMN9Uofv
+# ENtdwwEmJ3bZrcI9u4LZAkujAgMBAAGjggGCMIIBfjAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU6m4qAkpz4641iK2irF8eWsSBcBkw
+# VAYDVR0RBE0wS6RJMEcxLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVsYW5kIE9wZXJh
+# dGlvbnMgTGltaXRlZDEWMBQGA1UEBRMNMjMwMDEyKzUwMjkyNjAfBgNVHSMEGDAW
+# gBRIbmTlUAXTgqoXNzcitW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIw
+# MTEtMDctMDguY3JsMGEGCCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDov
+# L3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDEx
+# XzIwMTEtMDctMDguY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIB
+# AFFo/6E4LX51IqFuoKvUsi80QytGI5ASQ9zsPpBa0z78hutiJd6w154JkcIx/f7r
+# EBK4NhD4DIFNfRiVdI7EacEs7OAS6QHF7Nt+eFRNOTtgHb9PExRy4EI/jnMwzQJV
+# NokTxu2WgHr/fBsWs6G9AcIgvHjWNN3qRSrhsgEdqHc0bRDUf8UILAdEZOMBvKLC
+# rmf+kJPEvPldgK7hFO/L9kmcVe67BnKejDKO73Sa56AJOhM7CkeATrJFxO9GLXos
+# oKvrwBvynxAg18W+pagTAkJefzneuWSmniTurPCUE2JnvW7DalvONDOtG01sIVAB
+# +ahO2wcUPa2Zm9AiDVBWTMz9XUoKMcvngi2oqbsDLhbK+pYrRUgRpNt0y1sxZsXO
+# raGRF8lM2cWvtEkV5UL+TQM1ppv5unDHkW8JS+QnfPbB8dZVRyRmMQ4aY/tx5x5+
+# sX6semJ//FbiclSMxSI+zINu1jYerdUwuCi+P6p7SmQmClhDM+6Q+btE2FtpsU0W
+# +r6RdYFf/P+nK6j2otl9Nvr3tWLu+WXmz8MGM+18ynJ+lYbSmFWcAj7SYziAfT0s
+# IwlQRFkyC71tsIZUhBHtxPliGUu362lIO0Lpe0DOrg8lspnEWOkHnCT5JEnWCbzu
+# iVt8RX1IV07uIveNZuOBWLVCzWJjEGa+HhaEtavjy6i7MIIHejCCBWKgAwIBAgIK
+# YQ6Q0gAAAAAAAzANBgkqhkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlm
+# aWNhdGUgQXV0aG9yaXR5IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEw
+# OTA5WjB+MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UE
+# BxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYD
+# VQQDEx9NaWNyb3NvZnQgQ29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG
+# 9w0BAQEFAAOCAg8AMIICCgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+la
+# UKq4BjgaBEm6f8MMHt03a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc
+# 6Whe0t+bU7IKLMOv2akrrnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4D
+# dato88tt8zpcoRb0RrrgOGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+
+# lD3v++MrWhAfTVYoonpy4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nk
+# kDstrjNYxbc+/jLTswM9sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6
+# A4aN91/w0FK/jJSHvMAhdCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmd
+# X4jiJV3TIUs+UsS1Vz8kA/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL
+# 5zmhD+kjSbwYuER8ReTBw3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zd
+# sGbiwZeBe+3W7UvnSSmnEyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3
+# T8HhhUSJxAlMxdSlQy90lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS
+# 4NaIjAsCAwEAAaOCAe0wggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRI
+# bmTlUAXTgqoXNzcitW2oynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTAL
+# BgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBD
+# uRQFTuHqp8cx0SOJNDBaBgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jv
+# c29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3JsMF4GCCsGAQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFf
+# MDNfMjIuY3J0MIGfBgNVHSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEF
+# BQcCARYzaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1h
+# cnljcHMuaHRtMEAGCCsGAQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkA
+# YwB5AF8AcwB0AGEAdABlAG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn
+# 8oalmOBUeRou09h0ZyKbC5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7
+# v0epo/Np22O/IjWll11lhJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0b
+# pdS1HXeUOeLpZMlEPXh6I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/
+# KmtYSWMfCWluWpiW5IP0wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvy
+# CInWH8MyGOLwxS3OW560STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBp
+# mLJZiWhub6e3dMNABQamASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJi
+# hsMdYzaXht/a8/jyFqGaJ+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYb
+# BL7fQccOKO7eZS/sl/ahXJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbS
+# oqKfenoi+kiVH6v7RyOA9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sL
+# gOppO6/8MO0ETI7f33VtY5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtX
+# cVZOSEXAQsmbdlsKgEhr/Xmfwb1tbWrJUnMTDXpQzTGCGiYwghoiAgEBMIGVMH4x
+# CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRt
+# b25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01p
+# Y3Jvc29mdCBDb2RlIFNpZ25pbmcgUENBIDIwMTECEzMAAAQDvdWVXQ87GK0AAAAA
+# BAMwDQYJYIZIAWUDBAIBBQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQw
+# HAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIJ0/
+# ZM9udgTkgpNbuGSile8N73r9dgtBvFoCknZZBy2SMEIGCisGAQQBgjcCAQwxNDAy
+# oBSAEgBNAGkAYwByAG8AcwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20wDQYJKoZIhvcNAQEBBQAEggEAVK8HY/qznmz34buAnokKc8De3neutGBfsOGw
+# +8rb1bunIu6t/DksKZxGsOxc8sEl91vicxYg2ZJNtJQh1r2rkP4GobzG7P2jqa6X
+# mfXwA9A+jIg16pHQ3e4nCJWIIwUhoivjxQabp2DpFKaJ/duy2swnvqfmlafBubRn
+# uy8/7MNEq/fz3NCxaGwCUpTSXTCpquUrF9sgRsGFoRzXJRzAfH9aFdjjdyioEbw7
+# TYEYTvURpAgde6LRs+pZW9i7FZ2JucxFbDkTBs58a2/rmQ5RSMz5yw9ekAusD6cB
+# +n3daXIn+4sDUXF6WQnCA8Tk8IWEpzKSHWaH+VBSQVbB/xaoOKGCF7AwghesBgor
+# BgEEAYI3AwMBMYIXnDCCF5gGCSqGSIb3DQEHAqCCF4kwgheFAgEDMQ8wDQYJYIZI
+# AWUDBAIBBQAwggFaBgsqhkiG9w0BCRABBKCCAUkEggFFMIIBQQIBAQYKKwYBBAGE
+# WQoDATAxMA0GCWCGSAFlAwQCAQUABCBJqcIg3GEg1MGCxdkjylr/ZBLgvL1Pn0C2
+# 2IVSgDpNfwIGZ2LWE0XzGBMyMDI1MDExMTAwMjQ1Ni42NTVaMASAAgH0oIHZpIHW
+# MIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQL
+# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsT
+# Hm5TaGllbGQgVFNTIEVTTjo0QzFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgU2VydmljZaCCEf4wggcoMIIFEKADAgECAhMzAAAB/xI4
+# fPfBZdahAAEAAAH/MA0GCSqGSIb3DQEBCwUAMHwxCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1w
+# IFBDQSAyMDEwMB4XDTI0MDcyNTE4MzExOVoXDTI1MTAyMjE4MzExOVowgdMxCzAJ
+# BgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25k
+# MR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jv
+# c29mdCBJcmVsYW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVs
+# ZCBUU1MgRVNOOjRDMUEtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGlt
+# ZS1TdGFtcCBTZXJ2aWNlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA
+# yeiV0pB7bg8/qc/mkiDdJXnzJWPYgk9mTGeI3pzQpsyrRJREWcKYHd/9db+g3z4d
+# U4VCkAZEXqvkxP5QNTtBG5Ipexpph4PhbiJKwvX+US4KkSFhf1wflDAY1tu9CQqh
+# hxfHFV7vhtmqHLCCmDxhZPmCBh9/XfFJQIUwVZR8RtUkgzmN9bmWiYgfX0R+bDAn
+# ncUdtp1xjGmCpdBMygk/K0h3bUTUzQHb4kPf2ylkKPoWFYn2GNYgWw8PGBUO0vTM
+# KjYD6pLeBP0hZDh5P3f4xhGLm6x98xuIQp/RFnzBbgthySXGl+NT1cZAqGyEhT7L
+# 0SdR7qQlv5pwDNerbK3YSEDKk3sDh9S60hLJNqP71iHKkG175HAyg6zmE5p3fONr
+# 9/fIEpPAlC8YisxXaGX4RpDBYVKpGj0FCZwisiZsxm0X9w6ZSk8OOXf8JxTYWIqf
+# RuWzdUir0Z3jiOOtaDq7XdypB4gZrhr90KcPTDRwvy60zrQca/1D1J7PQJAJObbi
+# aboi12usV8axtlT/dCePC4ndcFcar1v+fnClhs9u3Fn6LkHDRZfNzhXgLDEwb6dA
+# 4y3s6G+gQ35o90j2i6amaa8JsV/cCF+iDSGzAxZY1sQ1mrdMmzxfWzXN6sPJMy49
+# tdsWTIgZWVOSS9uUHhSYkbgMxnLeiKXeB5MB9QMcOScCAwEAAaOCAUkwggFFMB0G
+# A1UdDgQWBBTD+pXk/rT/d7E/0QE7hH0wz+6UYTAfBgNVHSMEGDAWgBSfpxVdAF5i
+# XYP05dJlpxtTNRnpcjBfBgNVHR8EWDBWMFSgUqBQhk5odHRwOi8vd3d3Lm1pY3Jv
+# c29mdC5jb20vcGtpb3BzL2NybC9NaWNyb3NvZnQlMjBUaW1lLVN0YW1wJTIwUENB
+# JTIwMjAxMCgxKS5jcmwwbAYIKwYBBQUHAQEEYDBeMFwGCCsGAQUFBzAChlBodHRw
+# Oi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3BzL2NlcnRzL01pY3Jvc29mdCUyMFRp
+# bWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNydDAMBgNVHRMBAf8EAjAAMBYGA1Ud
+# JQEB/wQMMAoGCCsGAQUFBwMIMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQsF
+# AAOCAgEAOSNN5MpLiyunm866frWIi0hdazKNLgRp3WZPfhYgPC3K/DNMzLliYQUA
+# p6WtgolIrativXjOG1lIjayG9r6ew4H1n5XZdDfJ12DLjopap5e1iU/Yk0eutPyf
+# OievfbsIzTk/G51+uiUJk772nVzau6hI2KGyGBJOvAbAVFR0g8ppZwLghT4z3mkG
+# Zjq/O4Z/PcmVGtjGps2TCtI4rZjPNW8O4c/4aJRmYQ/NdW91JRrOXRpyXrTKUPe3
+# kN8N56jpl9kotLhdvd89RbOsJNf2XzqbAV7XjV4caCglA2btzDxcyffwXhLu9HMU
+# 3dLYTAI91gTNUF7BA9q1EvSlCKKlN8N10Y4iU0nyIkfpRxYyAbRyq5QPYPJHGA0T
+# y0PD83aCt79Ra0IdDIMSuwXlpUnyIyxwrDylgfOGyysWBwQ/js249bqQOYPdpyOd
+# gRe8tXdGrgDoBeuVOK+cRClXpimNYwr61oZ2/kPMzVrzRUYMkBXe9WqdSezh8tyt
+# uulYYcRK95qihF0irQs6/WOQJltQX79lzFXE9FFln9Mix0as+C4HPzd+S0bBN3A3
+# XRROwAv016ICuT8hY1InyW7jwVmN+OkQ1zei66LrU5RtAz0nTxx5OePyjnTaItTS
+# Y4OGuGU1SXaH49JSP3t8yGYA/vorbW4VneeD721FgwaJToHFkOIwggdxMIIFWaAD
+# AgECAhMzAAAAFcXna54Cm0mZAAAAAAAVMA0GCSqGSIb3DQEBCwUAMIGIMQswCQYD
+# VQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEe
+# MBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMTIwMAYDVQQDEylNaWNyb3Nv
+# ZnQgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgMjAxMDAeFw0yMTA5MzAxODIy
+# MjVaFw0zMDA5MzAxODMyMjVaMHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNo
+# aW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29y
+# cG9yYXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEw
+# MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA5OGmTOe0ciELeaLL1yR5
+# vQ7VgtP97pwHB9KpbE51yMo1V/YBf2xK4OK9uT4XYDP/XE/HZveVU3Fa4n5KWv64
+# NmeFRiMMtY0Tz3cywBAY6GB9alKDRLemjkZrBxTzxXb1hlDcwUTIcVxRMTegCjhu
+# je3XD9gmU3w5YQJ6xKr9cmmvHaus9ja+NSZk2pg7uhp7M62AW36MEBydUv626GIl
+# 3GoPz130/o5Tz9bshVZN7928jaTjkY+yOSxRnOlwaQ3KNi1wjjHINSi947SHJMPg
+# yY9+tVSP3PoFVZhtaDuaRr3tpK56KTesy+uDRedGbsoy1cCGMFxPLOJiss254o2I
+# 5JasAUq7vnGpF1tnYN74kpEeHT39IM9zfUGaRnXNxF803RKJ1v2lIH1+/NmeRd+2
+# ci/bfV+AutuqfjbsNkz2K26oElHovwUDo9Fzpk03dJQcNIIP8BDyt0cY7afomXw/
+# TNuvXsLz1dhzPUNOwTM5TI4CvEJoLhDqhFFG4tG9ahhaYQFzymeiXtcodgLiMxhy
+# 16cg8ML6EgrXY28MyTZki1ugpoMhXV8wdJGUlNi5UPkLiWHzNgY1GIRH29wb0f2y
+# 1BzFa/ZcUlFdEtsluq9QBXpsxREdcu+N+VLEhReTwDwV2xo3xwgVGD94q0W29R6H
+# XtqPnhZyacaue7e3PmriLq0CAwEAAaOCAd0wggHZMBIGCSsGAQQBgjcVAQQFAgMB
+# AAEwIwYJKwYBBAGCNxUCBBYEFCqnUv5kxJq+gpE8RjUpzxD/LwTuMB0GA1UdDgQW
+# BBSfpxVdAF5iXYP05dJlpxtTNRnpcjBcBgNVHSAEVTBTMFEGDCsGAQQBgjdMg30B
+# ATBBMD8GCCsGAQUFBwIBFjNodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20vcGtpb3Bz
+# L0RvY3MvUmVwb3NpdG9yeS5odG0wEwYDVR0lBAwwCgYIKwYBBQUHAwgwGQYJKwYB
+# BAGCNxQCBAweCgBTAHUAYgBDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMB
+# Af8wHwYDVR0jBBgwFoAU1fZWy4/oolxiaNE9lJBb186aGMQwVgYDVR0fBE8wTTBL
+# oEmgR4ZFaHR0cDovL2NybC5taWNyb3NvZnQuY29tL3BraS9jcmwvcHJvZHVjdHMv
+# TWljUm9vQ2VyQXV0XzIwMTAtMDYtMjMuY3JsMFoGCCsGAQUFBwEBBE4wTDBKBggr
+# BgEFBQcwAoY+aHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3BraS9jZXJ0cy9NaWNS
+# b29DZXJBdXRfMjAxMC0wNi0yMy5jcnQwDQYJKoZIhvcNAQELBQADggIBAJ1Vffwq
+# reEsH2cBMSRb4Z5yS/ypb+pcFLY+TkdkeLEGk5c9MTO1OdfCcTY/2mRsfNB1OW27
+# DzHkwo/7bNGhlBgi7ulmZzpTTd2YurYeeNg2LpypglYAA7AFvonoaeC6Ce5732pv
+# vinLbtg/SHUB2RjebYIM9W0jVOR4U3UkV7ndn/OOPcbzaN9l9qRWqveVtihVJ9Ak
+# vUCgvxm2EhIRXT0n4ECWOKz3+SmJw7wXsFSFQrP8DJ6LGYnn8AtqgcKBGUIZUnWK
+# NsIdw2FzLixre24/LAl4FOmRsqlb30mjdAy87JGA0j3mSj5mO0+7hvoyGtmW9I/2
+# kQH2zsZ0/fZMcm8Qq3UwxTSwethQ/gpY3UA8x1RtnWN0SCyxTkctwRQEcb9k+SS+
+# c23Kjgm9swFXSVRk2XPXfx5bRAGOWhmRaw2fpCjcZxkoJLo4S5pu+yFUa2pFEUep
+# 8beuyOiJXk+d0tBMdrVXVAmxaQFEfnyhYWxz/gq77EFmPWn9y8FBSX5+k77L+Dvk
+# txW/tM4+pTFRhLy/AsGConsXHRWJjXD+57XQKBqJC4822rpM+Zv/Cuk0+CQ1Zyvg
+# DbjmjJnW4SLq8CdCPSWU5nR0W2rRnj7tfqAxM328y+l7vzhwRNGQ8cirOoo6CGJ/
+# 2XBjU02N7oJtpQUQwXEGahC0HVUzWLOhcGbyoYIDWTCCAkECAQEwggEBoYHZpIHW
+# MIHTMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMH
+# UmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMS0wKwYDVQQL
+# EyRNaWNyb3NvZnQgSXJlbGFuZCBPcGVyYXRpb25zIExpbWl0ZWQxJzAlBgNVBAsT
+# Hm5TaGllbGQgVFNTIEVTTjo0QzFBLTA1RTAtRDk0NzElMCMGA1UEAxMcTWljcm9z
+# b2Z0IFRpbWUtU3RhbXAgU2VydmljZaIjCgEBMAcGBSsOAwIaAxUAqROMbMS8JcUl
+# cnPkwRLFRPXFspmggYMwgYCkfjB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2Fz
+# aGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0IENv
+# cnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0EgMjAx
+# MDANBgkqhkiG9w0BAQsFAAIFAOsrpfMwIhgPMjAyNTAxMTAxMzU4MTFaGA8yMDI1
+# MDExMTEzNTgxMVowdzA9BgorBgEEAYRZCgQBMS8wLTAKAgUA6yul8wIBADAKAgEA
+# AgIJbgIB/zAHAgEAAgISkzAKAgUA6yz3cwIBADA2BgorBgEEAYRZCgQCMSgwJjAM
+# BgorBgEEAYRZCgMCoAowCAIBAAIDB6EgoQowCAIBAAIDAYagMA0GCSqGSIb3DQEB
+# CwUAA4IBAQCLcCh9bX/RVDwfc4POERjOC1r/Ho89VmopgSIl+ggY/t9oREd7iFUS
+# 7W5bnIzOPkrxBaLkPWfPsUxqce740pZbzekTDig7ZD7rqMfr808JH170+Xn+3WIo
+# Lt9QV/hA/UP/sZ7qxdUtRy4DsG21+81VBjlBc4op/TrZ1pPmubA6Qcxlppo8/6cu
+# /hByjdtwg4DPxIR3+VDkugZJrRqwYL0+3HcH1r5tBBJN0eyvJ3I2Kf1DEQQz5LH/
+# yWpkym9Tcwan5QNpMyYAJ6XHty8cHL1+GYpahsmPNeGNR4zhS2w1folAn8sHo7AN
+# qnQ1KYjL3eQ1cxG5jVLSgoSAZGlYL1pOMYIEDTCCBAkCAQEwgZMwfDELMAkGA1UE
+# BhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAc
+# BgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMdTWljcm9zb2Z0
+# IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAH/Ejh898Fl1qEAAQAAAf8wDQYJYIZI
+# AWUDBAIBBQCgggFKMBoGCSqGSIb3DQEJAzENBgsqhkiG9w0BCRABBDAvBgkqhkiG
+# 9w0BCQQxIgQgHXg8G5FNNrrsFotPLEkfAWyBk3gE/USEfpsP+TXINb8wgfoGCyqG
+# SIb3DQEJEAIvMYHqMIHnMIHkMIG9BCDkMu++yQJ3aaycIuMT6vA7JNuMaVOI3qDj
+# SEV8upyn/TCBmDCBgKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5n
+# dG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9y
+# YXRpb24xJjAkBgNVBAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwAhMz
+# AAAB/xI4fPfBZdahAAEAAAH/MCIEIFdFxcHPft5K+RC1+sYiGsEw1ZL+Smew4S1G
+# tAZ3nEH/MA0GCSqGSIb3DQEBCwUABIICAF7rF3CCuiqOAATvQkeKDX2HWaLxaGhF
+# EkvYsYeuAbMHb2gSkXlDq0lEM8dYW13csCNzVAOcE4oETrsto+HGaUvSbbNFrtb6
+# gd6cOUd4xci3qAViaLBLK6VJBC6TIkmLCrik/41Mv667uh4xcNPaOiIf0hy2onkK
+# ski4E7rAYSUvctrtHrcfTT/YYk/vWmefqYipq0/7k836xYGVTzLj98pBld5k4xGn
+# gWKvHaX609hbwQMXIjfnqFnbGiSyPbP/FZu1Nb9ABFm2zt9E4+3/P0DfZ+A1aeU/
+# jo/Fj7A+HL7dAUAX5JIwFZu8rrLgAtaGl+uBf5qF8+7ezM3e7+YeZ8CSS6UYj8t2
+# CSWt75n35SLleXFJUzBekdkmBArcJj6YZsxGzRfa0BWt+bGcPGs+wgX2QotaivME
+# ujDxyXoClWJM73WHyLklcm+rpqOdvuODKibLR3nyC6XmJl57wI7QEjpr2eNrig1k
+# Zn7onGbhpAVKG5OyIwfYqy4T/aTlNysq3kSwjnIl24UcLT3ycC2kVUYze62zB5ku
+# 0h53wDarhDAznUziBj9hKv5BRIWTt//grtfOAG7Rb9ZaJOP5z+kHiHoHLlWBedAK
+# h/RuqoTxm53e7Ap3WN9gfUQKzP/4LHD9qQHmbv+wsvxbkV0KtdtGinVb6bWowq4s
+# eXgi5lClk+l9
+# SIG # End signature block
diff --git a/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psm1 b/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psm1 new file mode 100644 index 0000000..8a3a08a --- /dev/null +++ b/vcpkg/scripts/posh-vcpkg/posh-vcpkg.psm1 @@ -0,0 +1,259 @@ +Register-ArgumentCompleter -Native -CommandName vcpkg -ScriptBlock {
+ param(
+ [string]$wordToComplete,
+ [System.Management.Automation.Language.CommandAst]$commandAst,
+ [int]$cursorPosition
+ )
+
+ if ($cursorPosition -lt $commandAst.CommandElements[0].Extent.EndOffset) {
+ return
+ }
+
+ [string]$commandText = $commandAst.CommandElements[0].Value
+
+ [string[]]$textsBeforeCursor = $commandAst.CommandElements |
+ Select-Object -Skip 1 | ForEach-Object {
+ if ($_.Extent.EndOffset -le $cursorPosition) {
+ $_.Extent.Text
+ }
+ elseif ($_.Extent.StartOffset -lt $cursorPosition) {
+ $_.Extent.Text.Substring(0, $cursorPosition - $_.Extent.StartOffset)
+ }
+ }
+
+ $spaceToComplete = if ($wordToComplete -ne '') { $null }
+ elseif ($PSNativeCommandArgumentPassing -in 'Standard', 'Windows') { '' }
+ else { '""' }
+
+ [PowerShell]$cmd = [PowerShell]::Create().AddScript{
+ Set-Location $args[0]
+ & $args[1] autocomplete @($args[2])
+ }.AddParameters(($PWD, $commandText, @($textsBeforeCursor + $spaceToComplete)))
+
+ [string[]]$completions = $cmd.Invoke()
+
+ if ($cmd.HadErrors -or $completions.Count -eq 0) {
+ return
+ }
+ else {
+ return $completions
+ }
+}
+
+# SIG # Begin signature block
+# MIIoRQYJKoZIhvcNAQcCoIIoNjCCKDICAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCD3lp9tM1D1Aouy
+# vkIi4UIH5pxBs6VEvfzAYqoThk7yzaCCDXYwggX0MIID3KADAgECAhMzAAAEBGx0
+# Bv9XKydyAAAAAAQEMA0GCSqGSIb3DQEBCwUAMH4xCzAJBgNVBAYTAlVTMRMwEQYD
+# VQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNpZ25p
+# bmcgUENBIDIwMTEwHhcNMjQwOTEyMjAxMTE0WhcNMjUwOTExMjAxMTE0WjB0MQsw
+# CQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9u
+# ZDEeMBwGA1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMR4wHAYDVQQDExVNaWNy
+# b3NvZnQgQ29ycG9yYXRpb24wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
+# AQC0KDfaY50MDqsEGdlIzDHBd6CqIMRQWW9Af1LHDDTuFjfDsvna0nEuDSYJmNyz
+# NB10jpbg0lhvkT1AzfX2TLITSXwS8D+mBzGCWMM/wTpciWBV/pbjSazbzoKvRrNo
+# DV/u9omOM2Eawyo5JJJdNkM2d8qzkQ0bRuRd4HarmGunSouyb9NY7egWN5E5lUc3
+# a2AROzAdHdYpObpCOdeAY2P5XqtJkk79aROpzw16wCjdSn8qMzCBzR7rvH2WVkvF
+# HLIxZQET1yhPb6lRmpgBQNnzidHV2Ocxjc8wNiIDzgbDkmlx54QPfw7RwQi8p1fy
+# 4byhBrTjv568x8NGv3gwb0RbAgMBAAGjggFzMIIBbzAfBgNVHSUEGDAWBgorBgEE
+# AYI3TAgBBggrBgEFBQcDAzAdBgNVHQ4EFgQU8huhNbETDU+ZWllL4DNMPCijEU4w
+# RQYDVR0RBD4wPKQ6MDgxHjAcBgNVBAsTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEW
+# MBQGA1UEBRMNMjMwMDEyKzUwMjkyMzAfBgNVHSMEGDAWgBRIbmTlUAXTgqoXNzci
+# tW2oynUClTBUBgNVHR8ETTBLMEmgR6BFhkNodHRwOi8vd3d3Lm1pY3Jvc29mdC5j
+# b20vcGtpb3BzL2NybC9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3JsMGEG
+# CCsGAQUFBwEBBFUwUzBRBggrBgEFBQcwAoZFaHR0cDovL3d3dy5taWNyb3NvZnQu
+# Y29tL3BraW9wcy9jZXJ0cy9NaWNDb2RTaWdQQ0EyMDExXzIwMTEtMDctMDguY3J0
+# MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQELBQADggIBAIjmD9IpQVvfB1QehvpC
+# Ge7QeTQkKQ7j3bmDMjwSqFL4ri6ae9IFTdpywn5smmtSIyKYDn3/nHtaEn0X1NBj
+# L5oP0BjAy1sqxD+uy35B+V8wv5GrxhMDJP8l2QjLtH/UglSTIhLqyt8bUAqVfyfp
+# h4COMRvwwjTvChtCnUXXACuCXYHWalOoc0OU2oGN+mPJIJJxaNQc1sjBsMbGIWv3
+# cmgSHkCEmrMv7yaidpePt6V+yPMik+eXw3IfZ5eNOiNgL1rZzgSJfTnvUqiaEQ0X
+# dG1HbkDv9fv6CTq6m4Ty3IzLiwGSXYxRIXTxT4TYs5VxHy2uFjFXWVSL0J2ARTYL
+# E4Oyl1wXDF1PX4bxg1yDMfKPHcE1Ijic5lx1KdK1SkaEJdto4hd++05J9Bf9TAmi
+# u6EK6C9Oe5vRadroJCK26uCUI4zIjL/qG7mswW+qT0CW0gnR9JHkXCWNbo8ccMk1
+# sJatmRoSAifbgzaYbUz8+lv+IXy5GFuAmLnNbGjacB3IMGpa+lbFgih57/fIhamq
+# 5VhxgaEmn/UjWyr+cPiAFWuTVIpfsOjbEAww75wURNM1Imp9NJKye1O24EspEHmb
+# DmqCUcq7NqkOKIG4PVm3hDDED/WQpzJDkvu4FrIbvyTGVU01vKsg4UfcdiZ0fQ+/
+# V0hf8yrtq9CkB8iIuk5bBxuPMIIHejCCBWKgAwIBAgIKYQ6Q0gAAAAAAAzANBgkq
+# hkiG9w0BAQsFADCBiDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEyMDAGA1UEAxMpTWljcm9zb2Z0IFJvb3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
+# IDIwMTEwHhcNMTEwNzA4MjA1OTA5WhcNMjYwNzA4MjEwOTA5WjB+MQswCQYDVQQG
+# EwJVUzETMBEGA1UECBMKV2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwG
+# A1UEChMVTWljcm9zb2Z0IENvcnBvcmF0aW9uMSgwJgYDVQQDEx9NaWNyb3NvZnQg
+# Q29kZSBTaWduaW5nIFBDQSAyMDExMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
+# CgKCAgEAq/D6chAcLq3YbqqCEE00uvK2WCGfQhsqa+laUKq4BjgaBEm6f8MMHt03
+# a8YS2AvwOMKZBrDIOdUBFDFC04kNeWSHfpRgJGyvnkmc6Whe0t+bU7IKLMOv2akr
+# rnoJr9eWWcpgGgXpZnboMlImEi/nqwhQz7NEt13YxC4Ddato88tt8zpcoRb0Rrrg
+# OGSsbmQ1eKagYw8t00CT+OPeBw3VXHmlSSnnDb6gE3e+lD3v++MrWhAfTVYoonpy
+# 4BI6t0le2O3tQ5GD2Xuye4Yb2T6xjF3oiU+EGvKhL1nkkDstrjNYxbc+/jLTswM9
+# sbKvkjh+0p2ALPVOVpEhNSXDOW5kf1O6nA+tGSOEy/S6A4aN91/w0FK/jJSHvMAh
+# dCVfGCi2zCcoOCWYOUo2z3yxkq4cI6epZuxhH2rhKEmdX4jiJV3TIUs+UsS1Vz8k
+# A/DRelsv1SPjcF0PUUZ3s/gA4bysAoJf28AVs70b1FVL5zmhD+kjSbwYuER8ReTB
+# w3J64HLnJN+/RpnF78IcV9uDjexNSTCnq47f7Fufr/zdsGbiwZeBe+3W7UvnSSmn
+# Eyimp31ngOaKYnhfsi+E11ecXL93KCjx7W3DKI8sj0A3T8HhhUSJxAlMxdSlQy90
+# lfdu+HggWCwTXWCVmj5PM4TasIgX3p5O9JawvEagbJjS4NaIjAsCAwEAAaOCAe0w
+# ggHpMBAGCSsGAQQBgjcVAQQDAgEAMB0GA1UdDgQWBBRIbmTlUAXTgqoXNzcitW2o
+# ynUClTAZBgkrBgEEAYI3FAIEDB4KAFMAdQBiAEMAQTALBgNVHQ8EBAMCAYYwDwYD
+# VR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBRyLToCMZBDuRQFTuHqp8cx0SOJNDBa
+# BgNVHR8EUzBRME+gTaBLhklodHRwOi8vY3JsLm1pY3Jvc29mdC5jb20vcGtpL2Ny
+# bC9wcm9kdWN0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3JsMF4GCCsG
+# AQUFBwEBBFIwUDBOBggrBgEFBQcwAoZCaHR0cDovL3d3dy5taWNyb3NvZnQuY29t
+# L3BraS9jZXJ0cy9NaWNSb29DZXJBdXQyMDExXzIwMTFfMDNfMjIuY3J0MIGfBgNV
+# HSAEgZcwgZQwgZEGCSsGAQQBgjcuAzCBgzA/BggrBgEFBQcCARYzaHR0cDovL3d3
+# dy5taWNyb3NvZnQuY29tL3BraW9wcy9kb2NzL3ByaW1hcnljcHMuaHRtMEAGCCsG
+# AQUFBwICMDQeMiAdAEwAZQBnAGEAbABfAHAAbwBsAGkAYwB5AF8AcwB0AGEAdABl
+# AG0AZQBuAHQALiAdMA0GCSqGSIb3DQEBCwUAA4ICAQBn8oalmOBUeRou09h0ZyKb
+# C5YR4WOSmUKWfdJ5DJDBZV8uLD74w3LRbYP+vj/oCso7v0epo/Np22O/IjWll11l
+# hJB9i0ZQVdgMknzSGksc8zxCi1LQsP1r4z4HLimb5j0bpdS1HXeUOeLpZMlEPXh6
+# I/MTfaaQdION9MsmAkYqwooQu6SpBQyb7Wj6aC6VoCo/KmtYSWMfCWluWpiW5IP0
+# wI/zRive/DvQvTXvbiWu5a8n7dDd8w6vmSiXmE0OPQvyCInWH8MyGOLwxS3OW560
+# STkKxgrCxq2u5bLZ2xWIUUVYODJxJxp/sfQn+N4sOiBpmLJZiWhub6e3dMNABQam
+# ASooPoI/E01mC8CzTfXhj38cbxV9Rad25UAqZaPDXVJihsMdYzaXht/a8/jyFqGa
+# J+HNpZfQ7l1jQeNbB5yHPgZ3BtEGsXUfFL5hYbXw3MYbBL7fQccOKO7eZS/sl/ah
+# XJbYANahRr1Z85elCUtIEJmAH9AAKcWxm6U/RXceNcbSoqKfenoi+kiVH6v7RyOA
+# 9Z74v2u3S5fi63V4GuzqN5l5GEv/1rMjaHXmr/r8i+sLgOppO6/8MO0ETI7f33Vt
+# Y5E90Z1WTk+/gFcioXgRMiF670EKsT/7qMykXcGhiJtXcVZOSEXAQsmbdlsKgEhr
+# /Xmfwb1tbWrJUnMTDXpQzTGCGiUwghohAgEBMIGVMH4xCzAJBgNVBAYTAlVTMRMw
+# EQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVN
+# aWNyb3NvZnQgQ29ycG9yYXRpb24xKDAmBgNVBAMTH01pY3Jvc29mdCBDb2RlIFNp
+# Z25pbmcgUENBIDIwMTECEzMAAAQEbHQG/1crJ3IAAAAABAQwDQYJYIZIAWUDBAIB
+# BQCgga4wGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEO
+# MAwGCisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEIBSdnuz9beOL1XZFf6XEgbeF
+# TIiv3265cxy0vW0PGSA/MEIGCisGAQQBgjcCAQwxNDAyoBSAEgBNAGkAYwByAG8A
+# cwBvAGYAdKEagBhodHRwOi8vd3d3Lm1pY3Jvc29mdC5jb20wDQYJKoZIhvcNAQEB
+# BQAEggEANo6T+xCuafTYJYFSUnxmvREkGtL4fdEsZtD8PJsm1MQozZDm/5XkdfZB
+# hGtaUSKZyleya9rPMf+ofjOim6P3cZ7iLP8QUgC4vFpG2jACnVc8XT0bY+sVf9Ry
+# 7XP37hEqNm6Bq9+UUiBaCuyG1UXsdzOpiPBWdisM37ckhd3fwF0BfBnaXtK0Tpup
+# Aq/SIEy2UvhvcMLP9cAP1A5MRzfZqKsBjYNk1rKNbCeWyXvXRCOcNcpVdW5jFcvW
+# TRmuPvI1z7M8l4BEUeMm7FdXPlbvlfXOTANX3M+u3iUhw8Rl+uCczI5HmIUz/TOj
+# TBIlY1wypJ2o/sOt/fS3csmuFhmnVqGCF68wgherBgorBgEEAYI3AwMBMYIXmzCC
+# F5cGCSqGSIb3DQEHAqCCF4gwgheEAgEDMQ8wDQYJYIZIAWUDBAIBBQAwggFZBgsq
+# hkiG9w0BCRABBKCCAUgEggFEMIIBQAIBAQYKKwYBBAGEWQoDATAxMA0GCWCGSAFl
+# AwQCAQUABCD7a/cqGHLI/6Hw5hYBmJPAhNWA+oOxzSwqnZj2d8Z9RQIGZ2KydTkU
+# GBIyMDI1MDExMTAwMjQ1NC44M1owBIACAfSggdmkgdYwgdMxCzAJBgNVBAYTAlVT
+# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
+# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
+# YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO
+# OjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
+# ZXJ2aWNloIIR/jCCBygwggUQoAMCAQICEzMAAAH2gy8malRdIsEAAQAAAfYwDQYJ
+# KoZIhvcNAQELBQAwfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24x
+# EDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlv
+# bjEmMCQGA1UEAxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwHhcNMjQw
+# NzI1MTgzMTA0WhcNMjUxMDIyMTgzMTA0WjCB0zELMAkGA1UEBhMCVVMxEzARBgNV
+# BAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jv
+# c29mdCBDb3Jwb3JhdGlvbjEtMCsGA1UECxMkTWljcm9zb2Z0IElyZWxhbmQgT3Bl
+# cmF0aW9ucyBMaW1pdGVkMScwJQYDVQQLEx5uU2hpZWxkIFRTUyBFU046NkIwNS0w
+# NUUwLUQ5NDcxJTAjBgNVBAMTHE1pY3Jvc29mdCBUaW1lLVN0YW1wIFNlcnZpY2Uw
+# ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDRQl4sxH831Y8FmG4pUUX5
+# 5Ylnrxa6N2PhfolHTlzE7kJ6k1ejXutVrPBYuSbkCNpWHX1lWMMKEfOKbGyhpfE2
+# 7wgOCArCle+kAAi2/hTHnR71La5XB8q/nun0kob5DtU41KG6OXU0IyRyBKs92Z3/
+# zNyyaHNw2hsuiasIAg5FnwjCFjLiyJVCV/U0qGXIDOaRYkPQ37rQiKiAUHODfIhK
+# y+ug7HTHXFKLY+JEhCVNcTvgyCBkMgMqof+Fv0VPaQr+dX9peO6j0syutGafjihh
+# gAN7+s73kX5Ibe666F/4fgiuJevSH2m0DpLAck9LZWZs1YKNBarkbhiStyps8xrH
+# u81dTC7tPrkTx8U93Ui4T1GwbhMwBXteRcGimY81+8vSGPGDjiSlCffzhXjqj7N1
+# CrLkr10OVab8nq9m2nnIDU/IPfD4dsa5tLSeIRDUvrAY6s9/MibQV06f7EWjjwRG
+# X4XHD/c69czkJjUSqfMTOc+PMlzs4nCElVHdVAMeMFwQVM69L0TR2I27V6hzD5kK
+# TPg+7+hC/6CpT5t/Evx7s8WS19EOUzoXI7OM/jO4jbmAPy073MmDqDp9Glplzjf2
+# YBuSXfMJXNMsOByG/pLFBqMm2++hBpnFB/S1GI9xuvYdZ8yiqp326JDSFNQSEbjg
+# UFJN5Q9l4R6dEJZp0JbgbwIDAQABo4IBSTCCAUUwHQYDVR0OBBYEFEjBmwm45wl9
+# Jw9Zxdm4EDgHz0ryMB8GA1UdIwQYMBaAFJ+nFV0AXmJdg/Tl0mWnG1M1GelyMF8G
+# A1UdHwRYMFYwVKBSoFCGTmh0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMv
+# Y3JsL01pY3Jvc29mdCUyMFRpbWUtU3RhbXAlMjBQQ0ElMjAyMDEwKDEpLmNybDBs
+# BggrBgEFBQcBAQRgMF4wXAYIKwYBBQUHMAKGUGh0dHA6Ly93d3cubWljcm9zb2Z0
+# LmNvbS9wa2lvcHMvY2VydHMvTWljcm9zb2Z0JTIwVGltZS1TdGFtcCUyMFBDQSUy
+# MDIwMTAoMSkuY3J0MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUH
+# AwgwDgYDVR0PAQH/BAQDAgeAMA0GCSqGSIb3DQEBCwUAA4ICAQDXeQGKsfVwe7VZ
+# hHXKyPXbmiYa1DQ9pCQTPAZvvTG2pKgj6y9CKGyB1NjFo9+nYhUV2CNoxoGLzXAH
+# z+e7zroV8Uop2F2nfCcxn3U+k/g6h7s1x/qogKSBK7CB0h1C+oTSHxVDlBbmwNXh
+# DQmePh/sodjHg2IzwLiNPDxJC2y7FaJMfYeKR/dBgHvVrt0H3OAc6RbSGBQR5Y72
+# aHbBaphL9DjwBKM6pjD+FrnihU59/bZZqgf78fF301MRT/i+W+xEgxZPSOyc0jvW
+# NUCtPhD0G3pVKFbPKqtoTpIpShmsTAGlWwjQsyDZfeE4tuULW/Ezf7AzI6H3toU6
+# zuwWe56a0jYx+PyqDXoFlMnFeWk+6tasb44GPgGhMOQL0DFdgHfIS27AyzulFYvL
+# EjHD/BX1McpQab7H5UTQ84vCStIyCO6VJeSl8QsdZaIJWyUlsUggH/gCW/6NAlIo
+# Am6j0IStubap4OT/OMliVhpUYzIq5hn65JFUoHaqQQ9wTMbV073MhrUynfYn7PNb
+# c/uy4l+PDrazeEM4uT7qUxA5HTjH7ajXsbctx4uSTEmbjUSt2JOMCZ0KV6f3KXoe
+# AykZLiiSMUIlf4Kk4VfuAEDc9XFBa5uKwBBsvkeBMUG1A0TNwJ2HUZjD/qfPM023
+# 7QZCeehsF1184CKqTO8i2peO8bIrVDCCB3EwggVZoAMCAQICEzMAAAAVxedrngKb
+# SZkAAAAAABUwDQYJKoZIhvcNAQELBQAwgYgxCzAJBgNVBAYTAlVTMRMwEQYDVQQI
+# EwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3Nv
+# ZnQgQ29ycG9yYXRpb24xMjAwBgNVBAMTKU1pY3Jvc29mdCBSb290IENlcnRpZmlj
+# YXRlIEF1dGhvcml0eSAyMDEwMB4XDTIxMDkzMDE4MjIyNVoXDTMwMDkzMDE4MzIy
+# NVowfDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcT
+# B1JlZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UE
+# AxMdTWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTAwggIiMA0GCSqGSIb3DQEB
+# AQUAA4ICDwAwggIKAoICAQDk4aZM57RyIQt5osvXJHm9DtWC0/3unAcH0qlsTnXI
+# yjVX9gF/bErg4r25PhdgM/9cT8dm95VTcVrifkpa/rg2Z4VGIwy1jRPPdzLAEBjo
+# YH1qUoNEt6aORmsHFPPFdvWGUNzBRMhxXFExN6AKOG6N7dcP2CZTfDlhAnrEqv1y
+# aa8dq6z2Nr41JmTamDu6GnszrYBbfowQHJ1S/rboYiXcag/PXfT+jlPP1uyFVk3v
+# 3byNpOORj7I5LFGc6XBpDco2LXCOMcg1KL3jtIckw+DJj361VI/c+gVVmG1oO5pG
+# ve2krnopN6zL64NF50ZuyjLVwIYwXE8s4mKyzbnijYjklqwBSru+cakXW2dg3viS
+# kR4dPf0gz3N9QZpGdc3EXzTdEonW/aUgfX782Z5F37ZyL9t9X4C626p+Nuw2TPYr
+# bqgSUei/BQOj0XOmTTd0lBw0gg/wEPK3Rxjtp+iZfD9M269ewvPV2HM9Q07BMzlM
+# jgK8QmguEOqEUUbi0b1qGFphAXPKZ6Je1yh2AuIzGHLXpyDwwvoSCtdjbwzJNmSL
+# W6CmgyFdXzB0kZSU2LlQ+QuJYfM2BjUYhEfb3BvR/bLUHMVr9lxSUV0S2yW6r1AF
+# emzFER1y7435UsSFF5PAPBXbGjfHCBUYP3irRbb1Hode2o+eFnJpxq57t7c+auIu
+# rQIDAQABo4IB3TCCAdkwEgYJKwYBBAGCNxUBBAUCAwEAATAjBgkrBgEEAYI3FQIE
+# FgQUKqdS/mTEmr6CkTxGNSnPEP8vBO4wHQYDVR0OBBYEFJ+nFV0AXmJdg/Tl0mWn
+# G1M1GelyMFwGA1UdIARVMFMwUQYMKwYBBAGCN0yDfQEBMEEwPwYIKwYBBQUHAgEW
+# M2h0dHA6Ly93d3cubWljcm9zb2Z0LmNvbS9wa2lvcHMvRG9jcy9SZXBvc2l0b3J5
+# Lmh0bTATBgNVHSUEDDAKBggrBgEFBQcDCDAZBgkrBgEEAYI3FAIEDB4KAFMAdQBi
+# AEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBTV
+# 9lbLj+iiXGJo0T2UkFvXzpoYxDBWBgNVHR8ETzBNMEugSaBHhkVodHRwOi8vY3Js
+# Lm1pY3Jvc29mdC5jb20vcGtpL2NybC9wcm9kdWN0cy9NaWNSb29DZXJBdXRfMjAx
+# MC0wNi0yMy5jcmwwWgYIKwYBBQUHAQEETjBMMEoGCCsGAQUFBzAChj5odHRwOi8v
+# d3d3Lm1pY3Jvc29mdC5jb20vcGtpL2NlcnRzL01pY1Jvb0NlckF1dF8yMDEwLTA2
+# LTIzLmNydDANBgkqhkiG9w0BAQsFAAOCAgEAnVV9/Cqt4SwfZwExJFvhnnJL/Klv
+# 6lwUtj5OR2R4sQaTlz0xM7U518JxNj/aZGx80HU5bbsPMeTCj/ts0aGUGCLu6WZn
+# OlNN3Zi6th542DYunKmCVgADsAW+iehp4LoJ7nvfam++Kctu2D9IdQHZGN5tggz1
+# bSNU5HhTdSRXud2f8449xvNo32X2pFaq95W2KFUn0CS9QKC/GbYSEhFdPSfgQJY4
+# rPf5KYnDvBewVIVCs/wMnosZiefwC2qBwoEZQhlSdYo2wh3DYXMuLGt7bj8sCXgU
+# 6ZGyqVvfSaN0DLzskYDSPeZKPmY7T7uG+jIa2Zb0j/aRAfbOxnT99kxybxCrdTDF
+# NLB62FD+CljdQDzHVG2dY3RILLFORy3BFARxv2T5JL5zbcqOCb2zAVdJVGTZc9d/
+# HltEAY5aGZFrDZ+kKNxnGSgkujhLmm77IVRrakURR6nxt67I6IleT53S0Ex2tVdU
+# CbFpAUR+fKFhbHP+CrvsQWY9af3LwUFJfn6Tvsv4O+S3Fb+0zj6lMVGEvL8CwYKi
+# excdFYmNcP7ntdAoGokLjzbaukz5m/8K6TT4JDVnK+ANuOaMmdbhIurwJ0I9JZTm
+# dHRbatGePu1+oDEzfbzL6Xu/OHBE0ZDxyKs6ijoIYn/ZcGNTTY3ugm2lBRDBcQZq
+# ELQdVTNYs6FwZvKhggNZMIICQQIBATCCAQGhgdmkgdYwgdMxCzAJBgNVBAYTAlVT
+# MRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQHEwdSZWRtb25kMR4wHAYDVQQK
+# ExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xLTArBgNVBAsTJE1pY3Jvc29mdCBJcmVs
+# YW5kIE9wZXJhdGlvbnMgTGltaXRlZDEnMCUGA1UECxMeblNoaWVsZCBUU1MgRVNO
+# OjZCMDUtMDVFMC1EOTQ3MSUwIwYDVQQDExxNaWNyb3NvZnQgVGltZS1TdGFtcCBT
+# ZXJ2aWNloiMKAQEwBwYFKw4DAhoDFQAVT15Kl3GzRrTokUi4YUciP8j7fqCBgzCB
+# gKR+MHwxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpXYXNoaW5ndG9uMRAwDgYDVQQH
+# EwdSZWRtb25kMR4wHAYDVQQKExVNaWNyb3NvZnQgQ29ycG9yYXRpb24xJjAkBgNV
+# BAMTHU1pY3Jvc29mdCBUaW1lLVN0YW1wIFBDQSAyMDEwMA0GCSqGSIb3DQEBCwUA
+# AgUA6ywrEzAiGA8yMDI1MDExMDIzMjYxMVoYDzIwMjUwMTExMjMyNjExWjB3MD0G
+# CisGAQQBhFkKBAExLzAtMAoCBQDrLCsTAgEAMAoCAQACAglJAgH/MAcCAQACAhJQ
+# MAoCBQDrLXyTAgEAMDYGCisGAQQBhFkKBAIxKDAmMAwGCisGAQQBhFkKAwKgCjAI
+# AgEAAgMHoSChCjAIAgEAAgMBhqAwDQYJKoZIhvcNAQELBQADggEBAL+LJZgrakLD
+# eDWAOC6zw3pF6nMPU7y9UIAHgCxa8O1/OGcF261k98S/EHvL1Q9kHrgnFqA+6uSq
+# VroQXeR4HBXCsMvdmsgeyIXjIxu8LJmLgkqNH03KjJeHLcqXs8IOiRIYVKajOJPA
+# rkZ/79+7ovJckIYWtPHjMky4M6v5CG5ngAX8ja5FcYzU3lKfshau5mO9taRDXs2H
+# akdwxm037yFAP9m1YQvszZdMsY5IpnBG/MyburgvCAiz9Mc2go/fWJ/AQnMuYpp2
+# 9vfRzzGmSuOYh6Hq6iRDUY3l4fzftJWauBGon7zyJGjXwauPqbkhIGuE3Gl3/xSd
+# T7oiHYZkTp8xggQNMIIECQIBATCBkzB8MQswCQYDVQQGEwJVUzETMBEGA1UECBMK
+# V2FzaGluZ3RvbjEQMA4GA1UEBxMHUmVkbW9uZDEeMBwGA1UEChMVTWljcm9zb2Z0
+# IENvcnBvcmF0aW9uMSYwJAYDVQQDEx1NaWNyb3NvZnQgVGltZS1TdGFtcCBQQ0Eg
+# MjAxMAITMwAAAfaDLyZqVF0iwQABAAAB9jANBglghkgBZQMEAgEFAKCCAUowGgYJ
+# KoZIhvcNAQkDMQ0GCyqGSIb3DQEJEAEEMC8GCSqGSIb3DQEJBDEiBCC7BfAbtu7L
+# NhZD+LBoXPUD61Q3zYpGMszQh6YcYypYvDCB+gYLKoZIhvcNAQkQAi8xgeowgecw
+# geQwgb0EICthTPGUXqblRItLh/w1cv/xqg0RV2wJlGYX4uVCMbaiMIGYMIGApH4w
+# fDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1Jl
+# ZG1vbmQxHjAcBgNVBAoTFU1pY3Jvc29mdCBDb3Jwb3JhdGlvbjEmMCQGA1UEAxMd
+# TWljcm9zb2Z0IFRpbWUtU3RhbXAgUENBIDIwMTACEzMAAAH2gy8malRdIsEAAQAA
+# AfYwIgQgJpA8sGCojR8TK5VZYo7CnBq41SnmOgCOIksZcp+/9G0wDQYJKoZIhvcN
+# AQELBQAEggIAiyem0a23Sz8inCm9PHLmtJcc/+e+Dv7nhQtw87LgRpPlinjWejdM
+# kJZN+8ZlWftQeJjrlsaKwdZ/qO1tJYegiHyVOCVqXzbP2bLvz1E1zbIk0AyB8Uw7
+# Ms0PzPJxjrJgNpot+aDMk4HtFG9wmHsAHv2PIjtJxkbJa/W67hi9SADXDVtOXSVg
+# yjBYwuC9XvPDlgVg07Kn87jNwoGSqVad4MO0bCVZhHEmrDaSKsJ59ld+cdFNL31x
+# FCkxhXkxtzklytDYBu6QPt0WTANZwZFtJ3LhGOi+eCc1BWCMtnItbOSeBoJkIODf
+# oOjchNwMNHPrzoUqmQjClKGRMsuovziJYvEQuiyx9nmupsws1ZbZb5Tu0gz5hpjH
+# CNIrq2MsMBT7TP541V+si6l40Rodp+UzZxjGM4nJHIPW9YQXGqCb2JBeC9Ac2pL6
+# ZA4aPy9fXG6YNeYweBle6jOgFF0gN0LcOfRywZI2Cl0O845cLXZ5GrktLJ0+wqea
+# pWG2PRVislBWGUIgACyr9OuHiyOH/jxH7+STiu/Go5kVTc9cgSmpVfXGpjjIiefN
+# +sL2i9ehKSBR4bytpnnn3/nPRfll7vhdqc2TAfJ8ETwaGa+gwb0Bgkt/O4AOZqRt
+# 5dUckjdIOpeuxv6Nt/h+5jb84y9MW4oQ8CRQ3J54M7hHseOQh6YhxGE=
+# SIG # End signature block
diff --git a/vcpkg/scripts/templates/portfile.in.cmake b/vcpkg/scripts/templates/portfile.in.cmake new file mode 100644 index 0000000..9587622 --- /dev/null +++ b/vcpkg/scripts/templates/portfile.in.cmake @@ -0,0 +1,84 @@ +# Common Ambient Variables: +# CURRENT_BUILDTREES_DIR = ${VCPKG_ROOT_DIR}\buildtrees\${PORT} +# CURRENT_PACKAGES_DIR = ${VCPKG_ROOT_DIR}\packages\${PORT}_${TARGET_TRIPLET} +# CURRENT_PORT_DIR = ${VCPKG_ROOT_DIR}\ports\${PORT} +# CURRENT_INSTALLED_DIR = ${VCPKG_ROOT_DIR}\installed\${TRIPLET} +# DOWNLOADS = ${VCPKG_ROOT_DIR}\downloads +# PORT = current port name (zlib, etc) +# TARGET_TRIPLET = current triplet (x86-windows, x64-windows-static, etc) +# VCPKG_CRT_LINKAGE = C runtime linkage type (static, dynamic) +# VCPKG_LIBRARY_LINKAGE = target library linkage type (static, dynamic) +# VCPKG_ROOT_DIR = <C:\path\to\current\vcpkg> +# VCPKG_TARGET_ARCHITECTURE = target architecture (x64, x86, arm) +# VCPKG_TOOLCHAIN = ON OFF +# TRIPLET_SYSTEM_ARCH = arm x86 x64 +# BUILD_ARCH = "Win32" "x64" "ARM" +# DEBUG_CONFIG = "Debug Static" "Debug Dll" +# RELEASE_CONFIG = "Release Static"" "Release DLL" +# VCPKG_TARGET_IS_WINDOWS +# VCPKG_TARGET_IS_UWP +# VCPKG_TARGET_IS_LINUX +# VCPKG_TARGET_IS_OSX +# VCPKG_TARGET_IS_FREEBSD +# VCPKG_TARGET_IS_ANDROID +# VCPKG_TARGET_IS_MINGW +# VCPKG_TARGET_EXECUTABLE_SUFFIX +# VCPKG_TARGET_STATIC_LIBRARY_SUFFIX +# VCPKG_TARGET_SHARED_LIBRARY_SUFFIX +# +# See additional helpful variables in /docs/maintainers/vcpkg_common_definitions.md + +# Also consider vcpkg_from_* functions if you can; the generated code here is for any web accessable +# source archive. +# vcpkg_from_github +# vcpkg_from_gitlab +# vcpkg_from_bitbucket +# vcpkg_from_sourceforge +vcpkg_download_distfile(ARCHIVE + URLS "@URL@" + FILENAME "@FILENAME@" + SHA512 @SHA512@ +) + +vcpkg_extract_source_archive_ex( + OUT_SOURCE_PATH SOURCE_PATH + ARCHIVE "${ARCHIVE}" + # (Optional) A friendly name to use instead of the filename of the archive (e.g.: a version number or tag). + # REF 1.0.0 + # (Optional) Read the docs for how to generate patches at: + # https://github.com/microsoft/vcpkg-docs/blob/main/vcpkg/examples/patching.md + # PATCHES + # 001_port_fixes.patch + # 002_more_port_fixes.patch +) + +# # Check if one or more features are a part of a package installation. +# # See /docs/maintainers/vcpkg_check_features.md for more details +# vcpkg_check_features(OUT_FEATURE_OPTIONS FEATURE_OPTIONS +# FEATURES +# tbb WITH_TBB +# INVERTED_FEATURES +# tbb ROCKSDB_IGNORE_PACKAGE_TBB +# ) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + # OPTIONS -DUSE_THIS_IN_ALL_BUILDS=1 -DUSE_THIS_TOO=2 + # OPTIONS_RELEASE -DOPTIMIZE=1 + # OPTIONS_DEBUG -DDEBUGGABLE=1 +) + +vcpkg_cmake_install() + +# # Moves all .cmake files from /debug/share/@PORT@/ to /share/@PORT@/ +# # See /docs/maintainers/ports/vcpkg-cmake-config/vcpkg_cmake_config_fixup.md for more details +# When you uncomment "vcpkg_cmake_config_fixup()", you need to add the following to "dependencies" vcpkg.json: +#{ +# "name": "vcpkg-cmake-config", +# "host": true +#} +# vcpkg_cmake_config_fixup() + +# Uncomment the line below if necessary to install the license file for the port +# as a file named `copyright` to the directory `${CURRENT_PACKAGES_DIR}/share/${PORT}` +# vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg/scripts/templates/vcpkg.json.in b/vcpkg/scripts/templates/vcpkg.json.in new file mode 100644 index 0000000..03476f8 --- /dev/null +++ b/vcpkg/scripts/templates/vcpkg.json.in @@ -0,0 +1,21 @@ +{ + "name": "@PORT@", + "version": "", + "homepage": "", + "description": "", + "license": "", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + } + ], + + "default-features": [], + "features": { + "example-feature": { + "description": "", + "dependencies": [] + } + } +} diff --git a/vcpkg/scripts/test_ports/cblas-test/CMakeLists.txt b/vcpkg/scripts/test_ports/cblas-test/CMakeLists.txt new file mode 100644 index 0000000..743ddb6 --- /dev/null +++ b/vcpkg/scripts/test_ports/cblas-test/CMakeLists.txt @@ -0,0 +1,5 @@ +cmake_minimum_required(VERSION 3.17) + +project(Find_CBLAS_external) +find_package(PkgConfig REQUIRED) +pkg_check_modules(CBLAS_PC REQUIRED IMPORTED_TARGET cblas) diff --git a/vcpkg/scripts/test_ports/cblas-test/portfile.cmake b/vcpkg/scripts/test_ports/cblas-test/portfile.cmake new file mode 100644 index 0000000..b6904bf --- /dev/null +++ b/vcpkg/scripts/test_ports/cblas-test/portfile.cmake @@ -0,0 +1,5 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# Make sure BLAS can be found +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}" + OPTIONS -DVCPKG_HOST_TRIPLET=${HOST_TRIPLET}) diff --git a/vcpkg/scripts/test_ports/cblas-test/vcpkg.json b/vcpkg/scripts/test_ports/cblas-test/vcpkg.json new file mode 100644 index 0000000..6b1df97 --- /dev/null +++ b/vcpkg/scripts/test_ports/cblas-test/vcpkg.json @@ -0,0 +1,19 @@ +{ + "$comment": "Keep the platform expressions in sync with the wrappers installed by the portfiles!", + "name": "cblas-test", + "version-date": "2022-04-22", + "description": "Metapackage for packages which provide BLAS", + "license": null, + "dependencies": [ + "cblas", + { + "name": "pkgconf", + "host": true, + "platform": "windows" + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/cmake-user/portfile.cmake b/vcpkg/scripts/test_ports/cmake-user/portfile.cmake new file mode 100644 index 0000000..f1c3ae8 --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake-user/portfile.cmake @@ -0,0 +1,248 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+set(cmake_commands "")
+if("cmake-current" IN_LIST FEATURES)
+ list(APPEND cmake_commands "${CMAKE_COMMAND}")
+endif()
+if("cmake-3-16" IN_LIST FEATURES)
+ # For convenient updates, use
+ # vcpkg install ... --cmake-args=-DVCPKG_CMAKE_USER_UPDATE=1
+ set(cmake_version 3.16.3)
+ set(legacy_cmake_archive NOTFOUND)
+ string(REGEX REPLACE "([^.]*[.][^.]*).*" "\\1" cmake_major_minor "${cmake_version}")
+ if(VCPKG_HOST_IS_WINDOWS OR VCPKG_CMAKE_USER_UPDATE)
+ set(name "cmake-${cmake_version}-win64-x64")
+ vcpkg_download_distfile(legacy_cmake_archive
+ FILENAME "${name}.zip"
+ URLS "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/${name}.zip"
+ "https://cmake.org/files/v${cmake_major_minor}/${name}.zip"
+ SHA512 724d22f3736f0f3503ceb6b49ebec64cd569c4c16ad4fae8ac38918b09ee67e3eaa8072e30546f14f4c13bb94c5639ec940ea1b4695c94225b2a597bb4da1ede
+ )
+ set(cmake_bin_dir "/bin")
+ endif()
+ if(VCPKG_HOST_IS_OSX OR VCPKG_CMAKE_USER_UPDATE)
+ set(name "cmake-${cmake_version}-Darwin-x86_64")
+ vcpkg_download_distfile(legacy_cmake_archive
+ FILENAME "${name}.tar.gz"
+ URLS "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/${name}.tar.gz"
+ "https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz"
+ SHA512 3e59e2406f4e088b60922fbf23e92e1be3bb34c00f919625210fd93c059b5e6785afa40d3a501f36b281cde29de592f2ccffade6fa3980d0cf31dc845483184f
+ )
+ set(cmake_bin_dir "/CMake.app/Contents/bin")
+ endif()
+ if(VCPKG_HOST_IS_LINUX OR VCPKG_CMAKE_USER_UPDATE)
+ set(name "cmake-${cmake_version}-Linux-x86_64")
+ vcpkg_download_distfile(legacy_cmake_archive
+ FILENAME "${name}.tar.gz"
+ URLS "https://github.com/Kitware/CMake/releases/download/v${cmake_version}/${name}.tar.gz"
+ "https://cmake.org/files/v${cmake_major_minor}/${name}.tar.gz"
+ SHA512 03be16ad06fcabe40a36d0a510fdb58f5612108aed70cef7f68879d82b9e04ad62a9d0c30f3406df618ec219c74fc27b4be533d970bc60ac22333951d6cabe1a
+ )
+ set(cmake_bin_dir "/bin")
+ endif()
+ if(NOT legacy_cmake_archive)
+ message(FATAL_ERROR "Unable to test feature 'cmake-3-16' for '${HOST_TRIPLET}' host.")
+ endif()
+ if(VCPKG_CMAKE_USER_UPDATE)
+ message(STATUS "All downloads are up-to-date.")
+ message(FATAL_ERROR "Stopping due to VCPKG_CMAKE_USER_UPDATE being enabled.")
+ endif()
+
+ vcpkg_extract_source_archive(legacy_cmake
+ ARCHIVE "${legacy_cmake_archive}"
+ SOURCE_BASE "${cmake_version}"
+ WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/cmake"
+ )
+ list(APPEND cmake_commands "${legacy_cmake}${cmake_bin_dir}/cmake")
+endif()
+
+vcpkg_find_acquire_program(NINJA)
+
+function(get_packages out_packages cmake_version)
+ set(packages "")
+ if("find-package" IN_LIST FEATURES)
+ file(READ "${CMAKE_CURRENT_LIST_DIR}/vcpkg.json" vcpkg_json)
+ string(JSON packages_json GET "${vcpkg_json}" "features" "find-package" "dependencies")
+ string(JSON packages_count LENGTH "${packages_json}")
+ if(packages_count GREATER 0)
+ math(EXPR last "${packages_count} - 1")
+ foreach(i RANGE 0 ${last})
+ # Some ports may be excluded via platform expressions,
+ # because they don't support particular platforms.
+ # Using the installed vcpkg_abi_info.txt as an indicator.
+ string(JSON port GET "${packages_json}" "${i}" "name")
+ if(NOT EXISTS "${CURRENT_INSTALLED_DIR}/share/${port}/vcpkg_abi_info.txt")
+ continue()
+ endif()
+ string(JSON since ERROR_VARIABLE since_not_found GET "${packages_json}" "${i}" "\$since")
+ if(since AND cmake_version VERSION_LESS since)
+ continue()
+ endif()
+ if(NOT EXISTS "${CURRENT_INSTALLED_DIR}/share/${port}/vcpkg_abi_info.txt")
+ continue()
+ endif()
+ string(JSON package GET "${packages_json}" "${i}" "\$package")
+ list(APPEND packages "${package}")
+ endforeach()
+ endif()
+ endif()
+ if("pkg-check-modules" IN_LIST FEATURES)
+ list(APPEND packages "ZLIBviaPkgConfig")
+ endif()
+ set("${out_packages}" "${packages}" PARENT_SCOPE)
+endfunction()
+
+function(test_cmake_project)
+ cmake_parse_arguments(PARSE_ARGV 0 "arg" "" "CMAKE_COMMAND;NAME" "OPTIONS")
+ if(NOT arg_NAME)
+ message(FATAL_ERROR "The NAME argument is mandatory.")
+ endif()
+ if(NOT arg_CMAKE_COMMAND)
+ set(arg_CMAKE_COMMAND "${CMAKE_COMMAND}")
+ endif()
+
+ execute_process(
+ COMMAND "${arg_CMAKE_COMMAND}" --version
+ OUTPUT_VARIABLE cmake_version_output
+ RESULT_VARIABLE cmake_version_result
+ )
+ string(REGEX MATCH "[1-9][0-9]*\\.[0-9]*\\.[0-9]*" cmake_version "${cmake_version_output}")
+ if(cmake_version_result OR NOT cmake_version)
+ message(FATAL_ERROR "Unable to determine version for '${arg_CMAKE_COMMAND}'.")
+ endif()
+
+ set(build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}")
+ set(base_options
+ # Interface: CMake
+ -G "Ninja"
+ "-DCMAKE_MAKE_PROGRAM=${NINJA}"
+ "-DCMAKE_VERBOSE_MAKEFILE=ON"
+ "-DCMAKE_INSTALL_PREFIX=${build_dir}/install"
+ "-DCMAKE_TOOLCHAIN_FILE=${SCRIPTS}/buildsystems/vcpkg.cmake"
+ # Interface: vcpkg.cmake and scripts/toolchains/*.cmake
+ "-DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=${VCPKG_CHAINLOAD_TOOLCHAIN_FILE}"
+ "-DVCPKG_TARGET_ARCHITECTURE=${VCPKG_TARGET_ARCHITECTURE}"
+ "-DVCPKG_TARGET_TRIPLET=${TARGET_TRIPLET}"
+ "-DVCPKG_CRT_LINKAGE=${VCPKG_CRT_LINKAGE}"
+ "-DVCPKG_HOST_TRIPLET=${HOST_TRIPLET}"
+ "-DVCPKG_INSTALLED_DIR=${_VCPKG_INSTALLED_DIR}"
+ "-DVCPKG_MANIFEST_MODE=OFF"
+ # Interface: project/CMakeLists.txt
+ "-DCHECK_BUILD_TYPE=${VCPKG_BUILD_TYPE}"
+ "-DCHECK_CMAKE_VERSION=${cmake_version}"
+ # Interface: generic override
+ ${VCPKG_CMAKE_CONFIGURE_OPTIONS}
+ )
+
+ if(VCPKG_CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
+ # Interface: CMake
+ list(APPEND base_options "-DCMAKE_SYSTEM_NAME=${VCPKG_CMAKE_SYSTEM_NAME}")
+ endif()
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ # Interface: scripts/toolchains/*.cmake
+ list(APPEND base_options "-DCMAKE_SYSTEM_VERSION=${VCPKG_CMAKE_SYSTEM_VERSION}")
+ endif()
+
+ if(DEFINED VCPKG_XBOX_CONSOLE_TARGET)
+ # Interface: scripts/toolchains/xbox.cmake
+ list(APPEND base_options "-DXBOX_CONSOLE_TARGET=${VCPKG_XBOX_CONSOLE_TARGET}")
+ endif()
+
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ list(APPEND base_options -DBUILD_SHARED_LIBS=ON)
+ else()
+ list(APPEND base_options -DBUILD_SHARED_LIBS=OFF)
+ endif()
+
+ message(STATUS "Running tests with CMake ${cmake_version} for '${arg_NAME}'")
+ file(REMOVE_RECURSE "${build_dir}")
+ file(MAKE_DIRECTORY "${build_dir}")
+ vcpkg_execute_required_process(
+ COMMAND
+ "${arg_CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project"
+ ${base_options}
+ ${arg_OPTIONS}
+ WORKING_DIRECTORY "${build_dir}"
+ LOGNAME "${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}-config"
+ )
+ vcpkg_execute_required_process(
+ COMMAND
+ "${arg_CMAKE_COMMAND}" --build . --target install
+ WORKING_DIRECTORY "${build_dir}"
+ LOGNAME "${TARGET_TRIPLET}-${cmake_version}-${arg_NAME}-build"
+ )
+ # To produce better error messages for failing wrappers,
+ # we run execute_process directly here, for each wrapper.
+ string(REPLACE " OFF:" ":" message
+ " CMake ${cmake_version}: @step@ with `find_package(@package@)` failed.\n"
+ " See logs for more information:\n"
+ " @log_out@\n"
+ " @log_err@\n"
+ )
+ if(DEFINED ENV{BUILD_REASON}) # On Azure Pipelines, add extra markup.
+ string(REPLACE " CMake" "##vso[task.logissue type=error]CMake" message "${message}")
+ endif()
+ get_packages(packages "${cmake_version}")
+ foreach(package IN LISTS packages)
+ string(MAKE_C_IDENTIFIER "${package}" package_string)
+ set(find_package_build_dir "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}")
+ set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-out.log")
+ set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-err.log")
+
+ message(STATUS " find_package(${package})")
+ file(REMOVE_RECURSE "${find_package_build_dir}")
+ file(MAKE_DIRECTORY "${find_package_build_dir}")
+ execute_process(
+ COMMAND
+ "${arg_CMAKE_COMMAND}" "${CMAKE_CURRENT_LIST_DIR}/project"
+ ${base_options}
+ ${arg_OPTIONS}
+ "-DFIND_PACKAGES=${package}"
+ --trace-expand
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE package_result
+ WORKING_DIRECTORY "${find_package_build_dir}"
+ )
+ if(package_result)
+ set(step "configuration")
+ string(CONFIGURE "${message}" package_message @ONLY)
+ message(SEND_ERROR "${package_message}")
+ else()
+ set(log_out "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-build-out.log")
+ set(log_err "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-${cmake_version}-find-package-${package_string}-${arg_NAME}-build-err.log")
+ execute_process(
+ COMMAND
+ "${arg_CMAKE_COMMAND}" --build .
+ OUTPUT_FILE "${log_out}"
+ ERROR_FILE "${log_err}"
+ RESULT_VARIABLE package_result
+ WORKING_DIRECTORY "${find_package_build_dir}"
+ )
+ if(package_result)
+ set(step "build")
+ string(CONFIGURE "${message}" package_message @ONLY)
+ message(SEND_ERROR "${package_message}")
+ endif()
+ endif()
+ endforeach()
+endfunction()
+
+if(NOT DEFINED VCPKG_CHAINLOAD_TOOLCHAIN_FILE)
+ z_vcpkg_select_default_vcpkg_chainload_toolchain()
+endif()
+
+foreach(executable IN LISTS cmake_commands)
+ test_cmake_project(NAME "release"
+ CMAKE_COMMAND "${executable}"
+ OPTIONS
+ "-DCMAKE_BUILD_TYPE=Release"
+ )
+ if (NOT VCPKG_BUILD_TYPE)
+ test_cmake_project(NAME "debug"
+ CMAKE_COMMAND "${executable}"
+ OPTIONS
+ "-DCMAKE_BUILD_TYPE=Debug"
+ )
+ endif()
+endforeach()
diff --git a/vcpkg/scripts/test_ports/cmake-user/project/CMakeLists.txt b/vcpkg/scripts/test_ports/cmake-user/project/CMakeLists.txt new file mode 100644 index 0000000..3ebb7a3 --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake-user/project/CMakeLists.txt @@ -0,0 +1,150 @@ +cmake_minimum_required(VERSION 3.5)
+project(cmake-user LANGUAGES C)
+
+message(STATUS "CMAKE_COMMAND: ${CMAKE_COMMAND}")
+set(CHECK_CMAKE_VERSION "NOTFOUND" CACHE STRING "Version of CMake expected to be found")
+if(NOT CHECK_CMAKE_VERSION)
+ message(WARNING "CMake version check: skipped (actual: ${CMAKE_VERSION})")
+elseif(NOT CHECK_CMAKE_VERSION VERSION_EQUAL CMAKE_VERSION)
+ message(SEND_ERROR "CMake version check: failed (actual: ${CMAKE_VERSION} expected: ${CHECK_CMAKE_VERSION})")
+else()
+ message(STATUS "CMake version check: success (actual: ${CMAKE_VERSION})")
+endif()
+
+# add_library overload
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/lib.c" "int lib_unused() { return 1; }")
+add_library(lib "${CMAKE_CURRENT_BINARY_DIR}/lib.c")
+
+# add_executable overload
+file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/exe.c" "int main() { return 0; }")
+add_executable(exe "${CMAKE_CURRENT_BINARY_DIR}/exe.c")
+
+# install overload
+set(X_VCPKG_APPLOCAL_DEPS_INSTALL 1)
+install(TARGETS exe lib
+ RUNTIME DESTINATION bin
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+)
+
+# find_package overload and wrapper
+set(FIND_PACKAGES "" CACHE STRING "List of packages to be found and used")
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}")
+foreach(package ${FIND_PACKAGES})
+ set(extra_args "")
+ if(package STREQUAL "Curses")
+ set(CURSES_NEED_WIDE 1)
+ elseif(package STREQUAL "ICU")
+ set(extra_args COMPONENTS uc)
+ endif()
+ string(TOUPPER "${package}" package_upper)
+ set(CMAKE_FIND_DEBUG_MODE ON)
+ find_package("${package}" ${extra_args} QUIET)
+ set(CMAKE_FIND_DEBUG_MODE OFF)
+ if(NOT ${package}_FOUND AND NOT ${package_upper}_FOUND)
+ message(SEND_ERROR "find_package(${package} ${extra_args}) check: failed")
+ continue()
+ endif()
+ # REQUIRED changes the behaviour find_package_handle_standard_args.
+ find_package("${package}" ${extra_args} REQUIRED)
+ message(STATUS "find_package(${package} ${extra_args}) check: success")
+
+ set(libraries_var "")
+ if(DEFINED ${package}_LIBRARIES)
+ set(libraries_var "${package}_LIBRARIES")
+ elseif(DEFINED ${package_upper}_LIBRARIES)
+ set(libraries_var "${package_upper}_LIBRARIES")
+ elseif(DEFINED ${package}_LIBRARY)
+ set(libraries_var "${package}_LIBRARY")
+ elseif(DEFINED ${package_upper}_LIBRARY)
+ set(libraries_var "${package_upper}_LIBRARY")
+ else()
+ message(STATUS "${package}_LIBRARY/IES: undefined")
+ continue()
+ endif()
+ set(libraries "${${libraries_var}}")
+ message(STATUS "${libraries_var}: ${libraries}")
+
+ if(package STREQUAL "Intl" AND NOT Intl_LIBRARY)
+ continue() # using libintl.h from C runtime library
+ endif()
+ target_link_libraries(exe PRIVATE ${libraries})
+
+ set(last_keyword "")
+ foreach(item IN LISTS libraries)
+ if(item STREQUAL "optimized" OR item STREQUAL "debug")
+ set(last_keyword "${item}")
+ continue()
+ endif()
+ string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/" starts_with_release)
+ string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/" starts_with_debug)
+ if(starts_with_release EQUAL "0")
+ if(last_keyword STREQUAL "optimized")
+ # okay
+ elseif(last_keyword STREQUAL "debug")
+ message(SEND_ERROR "Release lib for 'debug' keyword: ${item}")
+ elseif(CMAKE_BUILD_TYPE STREQUAL "Debug")
+ message(SEND_ERROR "Release lib for 'Debug' build: ${item}")
+ endif()
+ elseif(starts_with_debug EQUAL "0")
+ if(last_keyword STREQUAL "debug")
+ # okay
+ elseif(last_keyword STREQUAL "optimized")
+ message(SEND_ERROR "Debug lib for 'optimized' keyword: ${item}")
+ elseif(CMAKE_BUILD_TYPE STREQUAL "Release")
+ message(SEND_ERROR "Debug lib for 'Release' build: ${item}")
+ endif()
+ endif()
+ set(last_keyword "")
+ continue()
+ endforeach()
+
+ set(target "${package}::${package}")
+ string(REPLACE "SQLite3::" "SQLite::" target "${target}")
+ if(TARGET "${target}")
+ get_target_property(type "${target}" TYPE)
+ message(STATUS "${target}: ${type}")
+ if(type MATCHES "LIBRARY" AND NOT type MATCHES "INTERFACE")
+ get_target_property(configurations "${target}" IMPORTED_CONFIGURATIONS)
+ message(STATUS "IMPORTED_CONFIGURATIONS: ${configurations}")
+ if(configurations)
+ string(TOLOWER "${configurations}" configurations)
+ if("release" IN_LIST configurations)
+ set(property IMPORTED_IMPLIB_RELEASE)
+ get_target_property(location "${target}" "${property}")
+ if(NOT location)
+ set(property IMPORTED_LOCATION_RELEASE)
+ get_target_property(location "${target}" "${property}")
+ endif()
+ message(STATUS "${property}: ${location}")
+ string(FIND "${location}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" index)
+ if (NOT index EQUAL "0")
+ message(SEND_ERROR "Release lib is in wrong location.")
+ endif()
+ elseif(NOT CHECK_BUILD_TYPE OR CHECK_BUILD_TYPE STREQUAL "release")
+ message(SEND_ERROR "Release configuration is missing.")
+ endif()
+ if("debug" IN_LIST configurations)
+ set(property IMPORTED_IMPLIB_DEBUG)
+ get_target_property(location "${target}" "${property}")
+ if(NOT location)
+ set(property IMPORTED_LOCATION_DEBUG)
+ get_target_property(location "${target}" "${property}")
+ endif()
+ message(STATUS "${property}: ${location}")
+ string(FIND "${location}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" index)
+ if (NOT index EQUAL "0")
+ message(SEND_ERROR "Debug lib is in wrong location.")
+ endif()
+ elseif(NOT CHECK_BUILD_TYPE OR CHECK_BUILD_TYPE STREQUAL "debug")
+ message(SEND_ERROR "Debug configuration is missing.")
+ endif()
+ endif()
+ endif()
+ else()
+ get_directory_property(imported_targets IMPORTED_TARGETS)
+ if(imported_targets)
+ message(STATUS "Imported targets: ${imported_targets}")
+ endif()
+ endif()
+endforeach()
diff --git a/vcpkg/scripts/test_ports/cmake-user/project/FindZLIBviaPkgConfig.cmake b/vcpkg/scripts/test_ports/cmake-user/project/FindZLIBviaPkgConfig.cmake new file mode 100644 index 0000000..5f46a94 --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake-user/project/FindZLIBviaPkgConfig.cmake @@ -0,0 +1,11 @@ +# `pkgconf` is not recognized before CMake 3.22 +find_program(PKG_CONFIG_EXECUTABLE NAMES pkgconf REQUIRED) +find_package(PkgConfig REQUIRED) +pkg_check_modules(PC_ZLIB zlib) +if(PC_ZLIB_FOUND) + if(NOT PC_ZLIB_LDFLAGS) + message(SEND_ERROR "ZLIBviaPkgConfig_LIBRARIES is empty") + endif() + set(ZLIBviaPkgConfig_LIBRARIES "${PC_ZLIB_LDFLAGS}") + set(ZLIBviaPkgConfig_FOUND "${PC_ZLIB_FOUND}") +endif() diff --git a/vcpkg/scripts/test_ports/cmake-user/vcpkg.json b/vcpkg/scripts/test_ports/cmake-user/vcpkg.json new file mode 100644 index 0000000..4cc62e1 --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake-user/vcpkg.json @@ -0,0 +1,183 @@ +{ + "name": "cmake-user", + "version-string": "ci", + "description": "Test port to verify the vcpkg toolchain in cmake user projects", + "license": "MIT", + "default-features": [ + { + "name": "cmake-3-16", + "platform": "x64 & (windows | linux | osx) & !uwp" + }, + "cmake-current", + "find-package", + "pkg-check-modules" + ], + "features": { + "cmake-3-16": { + "description": "Run the tests with CMake 3.16" + }, + "cmake-current": { + "description": "Run the tests with vcpkg's current version of CMake" + }, + "find-package": { + "description": "Ports to be tested via find_package($package)", + "dependencies": [ + { + "$package": "ALSA", + "name": "alsa", + "platform": "linux" + }, + { + "$package": "Boost", + "name": "boost", + "platform": "!uwp" + }, + { + "$package": "BZip2", + "name": "bzip2" + }, + { + "$package": "CURL", + "name": "curl", + "default-features": false + }, + { + "$package": "EXPAT", + "name": "expat" + }, + { + "$package": "Fontconfig", + "name": "fontconfig", + "platform": "!mingw & !uwp" + }, + { + "$package": "GLUT", + "name": "freeglut", + "platform": "!android & !osx & !uwp" + }, + { + "$package": "Freetype", + "name": "freetype", + "default-features": false + }, + { + "$package": "GDAL", + "name": "gdal", + "default-features": false, + "platform": "!uwp" + }, + { + "$package": "Intl", + "name": "gettext-libintl" + }, + { + "$package": "GIF", + "name": "giflib" + }, + { + "$package": "ICU", + "name": "icu", + "platform": "!uwp" + }, + { + "$package": "LAPACK", + "name": "lapack", + "platform": "!android & !(uwp & arm)" + }, + { + "$package": "GnuTLS", + "name": "libgnutls", + "platform": "!android & (!windows | mingw)" + }, + { + "$package": "Iconv", + "name": "libiconv" + }, + { + "$package": "JPEG", + "name": "libjpeg-turbo" + }, + { + "$package": "LibLZMA", + "name": "liblzma" + }, + { + "$package": "PNG", + "name": "libpng" + }, + { + "$package": "PostgreSQL", + "name": "libpq", + "default-features": false, + "platform": "!uwp & !mingw" + }, + { + "$package": "LibXml2", + "name": "libxml2", + "default-features": false, + "features": [ + "icu" + ] + }, + { + "$package": "LibXslt", + "name": "libxslt", + "default-features": false, + "platform": "!uwp & !mingw" + }, + { + "$package": "Curses", + "name": "ncurses", + "platform": "!windows | mingw" + }, + { + "$package": "PhysFS", + "name": "physfs" + }, + { + "$package": "GnuTLS", + "name": "shiftmedia-libgnutls", + "platform": "windows & !arm & !mingw & !uwp & !xbox" + }, + { + "$package": "SQLite3", + "name": "sqlite3", + "default-features": false, + "features": [ + "unicode" + ] + }, + { + "$package": "TIFF", + "name": "tiff", + "default-features": false, + "features": [ + "lerc", + "libdeflate", + "zstd" + ] + }, + { + "$package": "wxWidgets", + "name": "wxwidgets", + "default-features": false, + "platform": "!android & !uwp" + }, + { + "$package": "ZLIB", + "name": "zlib" + } + ] + }, + "pkg-check-modules": { + "description": "Test `find_package(PkgConfig)` and pkg_check_modules(...)", + "dependencies": [ + { + "name": "pkgconf", + "host": true + }, + "zlib" + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/cmake/fix-dependency-libuv.patch b/vcpkg/scripts/test_ports/cmake/fix-dependency-libuv.patch new file mode 100644 index 0000000..a9a53de --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake/fix-dependency-libuv.patch @@ -0,0 +1,18 @@ +diff --git a/Source/Modules/CMakeBuildUtilities.cmake b/Source/Modules/CMakeBuildUtilities.cmake +index dba9d506..225779cd 100644 +--- a/Source/Modules/CMakeBuildUtilities.cmake ++++ b/Source/Modules/CMakeBuildUtilities.cmake +@@ -328,6 +328,13 @@ endif() + #--------------------------------------------------------------------- + # Build libuv library. + if(CMAKE_USE_SYSTEM_LIBUV) ++ find_package(libuv CONFIG REQUIRED) ++ if (TARGET libuv::uv) ++ add_library(LibUV::LibUV ALIAS libuv::uv) ++ else() ++ add_library(LibUV::LibUV ALIAS libuv::uv_a) ++ endif() ++elseif(0) + if(WIN32) + find_package(LibUV 1.38.0) + else() diff --git a/vcpkg/scripts/test_ports/cmake/portfile.cmake b/vcpkg/scripts/test_ports/cmake/portfile.cmake new file mode 100644 index 0000000..9ec71cf --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake/portfile.cmake @@ -0,0 +1,71 @@ +set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) + +vcpkg_download_distfile(curl_8_16_patch + URLS https://github.com/Kitware/CMake/commit/c8143074cf3954b1e169904eb9d843cfbe14acc3.diff?full_index=1 + FILENAME Kitware-CMake-curl_8_16.diff + SHA512 25b448798a314705982d957f18cddc6ca235ef8283ed6d32bab0aa949cee518a273dec79dfd48bbe24bbf1781c098a1c3e892134c3aa69efcfec410b9f4d7b6f +) + +vcpkg_from_gitlab( + GITLAB_URL https://gitlab.kitware.com/ + OUT_SOURCE_PATH SOURCE_PATH + REPO cmake/cmake + REF v${VERSION} + SHA512 ac67fe802179f6cd9ed290f905976923ffa3843e63e0e680a971a1019a88b813e281bd912e71a02af5df101eb1dd1692f140e34466ba4fa1b822a03097d2467b + HEAD_REF master + PATCHES + fix-dependency-libuv.patch + "${curl_8_16_patch}" +) +set(OPTIONS "") +if(VCPKG_TARGET_IS_WINDOWS) + list(APPEND OPTIONS "-DBUILD_CursesDialog=OFF") +else() + list(APPEND OPTIONS "-DBUILD_CursesDialog=ON") +endif() + +if(VCPKG_CROSSCOMPILING) + list(APPEND OPTIONS "-DQt6CoreTools_DIR=${CURRENT_HOST_INSTALLED_DIR}/share/Qt6CoreTools") + list(APPEND OPTIONS "-DQt6WidgetsTools_DIR=${CURRENT_HOST_INSTALLED_DIR}/share/Qt6WidgetsTools") + list(APPEND OPTIONS "-DQt6GuiTools_DIR=${CURRENT_HOST_INSTALLED_DIR}/share/Qt6GuiTools") +endif() + +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + set(VCPKG_CXX_FLAGS "/D_CRT_DECLARE_NONSTDC_NAMES ${VCPKG_CXX_FLAGS}") + set(VCPKG_C_FLAGS "/D_CRT_DECLARE_NONSTDC_NAMES ${VCPKG_C_FLAGS}") +endif() + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + OPTIONS + ${OPTIONS} + -DBUILD_TESTING=OFF + -DCMAKE_USE_SYSTEM_LIBRARIES=ON + -DBUILD_QtDialog=ON # Just to test Qt with CMake + -DCMake_QT_MAJOR_VERSION:STRING=6 +) + +vcpkg_cmake_install(ADD_BIN_TO_PATH) +vcpkg_copy_pdbs() + +if(VCPKG_TARGET_IS_OSX) + # On OSX everything is within a CMake.app folder + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools") + file(RENAME "${CURRENT_PACKAGES_DIR}/CMake.app" "${CURRENT_PACKAGES_DIR}/tools/CMake.app") + if(EXISTS "${CURRENT_PACKAGES_DIR}/debug/CMake.app") + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/debug") + file(RENAME "${CURRENT_PACKAGES_DIR}/debug/CMake.app" "${CURRENT_PACKAGES_DIR}/tools/debug/CMake.app") + endif() +else() + set(tool_names cmake cmake-gui ctest cpack) + if(VCPKG_TARGET_IS_WINDOWS) + list(APPEND tool_names cmcldeps) + elseif(NOT VCPKG_TARGET_IS_ANDROID) + list(APPEND tool_names ccmake) + endif() + vcpkg_copy_tools(TOOL_NAMES ${tool_names} AUTO_CLEAN) +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.rst") diff --git a/vcpkg/scripts/test_ports/cmake/vcpkg.json b/vcpkg/scripts/test_ports/cmake/vcpkg.json new file mode 100644 index 0000000..e97f7ea --- /dev/null +++ b/vcpkg/scripts/test_ports/cmake/vcpkg.json @@ -0,0 +1,44 @@ +{ + "name": "cmake", + "version": "4.0.0", + "description": "CMake is an open-source, cross-platform family of tools designed to build, test and package software.", + "homepage": "https://cmake.org/", + "license": "BSD-3-Clause", + "dependencies": [ + "cppdap", + { + "name": "curl", + "default-features": false + }, + "expat", + "jsoncpp", + { + "name": "libarchive", + "default-features": false, + "features": [ + "bzip2", + "lzma", + "zstd" + ] + }, + "libuv", + { + "name": "ncurses", + "platform": "!windows" + }, + "nghttp2", + { + "name": "qtbase", + "default-features": false, + "features": [ + "widgets" + ] + }, + "rhash", + { + "name": "vcpkg-cmake", + "host": true + }, + "zlib" + ] +} diff --git a/vcpkg/scripts/test_ports/lapack-test/CMakeLists.txt b/vcpkg/scripts/test_ports/lapack-test/CMakeLists.txt new file mode 100644 index 0000000..1874911 --- /dev/null +++ b/vcpkg/scripts/test_ports/lapack-test/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.17) + +project(Find_LAPACK_external) +find_package(LAPACK REQUIRED) +find_package(PkgConfig REQUIRED) +pkg_check_modules(LAPACK_PC REQUIRED IMPORTED_TARGET lapack) diff --git a/vcpkg/scripts/test_ports/lapack-test/portfile.cmake b/vcpkg/scripts/test_ports/lapack-test/portfile.cmake new file mode 100644 index 0000000..28b2faa --- /dev/null +++ b/vcpkg/scripts/test_ports/lapack-test/portfile.cmake @@ -0,0 +1,5 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# Make sure LAPACK can be found +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}" + OPTIONS -DVCPKG_HOST_TRIPLET=${HOST_TRIPLET}) diff --git a/vcpkg/scripts/test_ports/lapack-test/vcpkg.json b/vcpkg/scripts/test_ports/lapack-test/vcpkg.json new file mode 100644 index 0000000..00c2832 --- /dev/null +++ b/vcpkg/scripts/test_ports/lapack-test/vcpkg.json @@ -0,0 +1,19 @@ +{ + "$comment": "Keep the platform expressions in sync with the wrappers installed by the portfiles!", + "name": "lapack-test", + "version-date": "2022-02-22", + "description": "Metapackage for packages which provide LAPACK", + "license": null, + "dependencies": [ + "lapack", + { + "name": "pkgconf", + "host": true, + "platform": "windows" + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/llfio-run-tests/portfile.cmake b/vcpkg/scripts/test_ports/llfio-run-tests/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/llfio-run-tests/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/llfio-run-tests/vcpkg.json b/vcpkg/scripts/test_ports/llfio-run-tests/vcpkg.json new file mode 100644 index 0000000..32c0cf4 --- /dev/null +++ b/vcpkg/scripts/test_ports/llfio-run-tests/vcpkg.json @@ -0,0 +1,22 @@ +{ + "name": "llfio-run-tests", + "version-string": "0", + "port-version": 1, + "description": "Ensures that LLFIO built with vcpkg version of dependencies produces working executables.", + "supports": "x64", + "dependencies": [ + { + "name": "llfio", + "features": [ + "run-tests" + ] + }, + { + "name": "llfio", + "features": [ + "run-tests", + "status-code" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/outcome-run-tests/portfile.cmake b/vcpkg/scripts/test_ports/outcome-run-tests/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/outcome-run-tests/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/outcome-run-tests/vcpkg.json b/vcpkg/scripts/test_ports/outcome-run-tests/vcpkg.json new file mode 100644 index 0000000..8a20395 --- /dev/null +++ b/vcpkg/scripts/test_ports/outcome-run-tests/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "outcome-run-tests", + "version-string": "0", + "port-version": 1, + "description": "Ensures that outcome built with vcpkg version of dependencies produces working executables.", + "supports": "x64", + "dependencies": [ + { + "name": "outcome", + "features": [ + "run-tests" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/portfile.cmake b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/portfile.cmake new file mode 100644 index 0000000..960fd7b --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/portfile.cmake @@ -0,0 +1,46 @@ +set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) +vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS_RELEASE + -DTEST_STRING=release + OPTIONS_DEBUG + -DTEST_STRING=debug +) +vcpkg_cmake_install() + +function(make_rpath_absolute lib_dir) +string(REPLACE "/" "_" logname "make_rpath_absolute-${lib_dir}") + vcpkg_execute_required_process( + COMMAND "install_name_tool" -id ${CURRENT_INSTALLED_DIR}/${lib_dir}/librpath-macho-backend-lib++.dylib ${CURRENT_PACKAGES_DIR}/${lib_dir}/librpath-macho-backend-lib++.dylib + WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}" + LOGNAME "${logname}-id" + ) + + vcpkg_execute_required_process( + COMMAND "install_name_tool" -change @rpath/librpath-macho-backend-lib++.dylib ${CURRENT_INSTALLED_DIR}/${lib_dir}/librpath-macho-backend-lib++.dylib ${CURRENT_PACKAGES_DIR}/${lib_dir}/librpath-macho-test-lib.dylib + WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}" + LOGNAME "${logname}-change" + ) +endfunction() + +if(NOT VCPKG_BUILD_TYPE) + vcpkg_copy_tools(TOOL_NAMES rpath-macho-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/debug/tools/${PORT}" + ) + vcpkg_copy_tools(TOOL_NAMES rpath-macho-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/manual-tools/${PORT}/debug" + ) + vcpkg_copy_tools(TOOL_NAMES rpath-macho-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug" + ) + make_rpath_absolute("debug/lib") +endif() +make_rpath_absolute("lib") +vcpkg_copy_tools(TOOL_NAMES rpath-macho-test-tool DESTINATION "${CURRENT_PACKAGES_DIR}/manual-tools/${PORT}") +vcpkg_copy_tools(TOOL_NAMES rpath-macho-test-tool AUTO_CLEAN) +file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "This test port is part of vcpkg.") diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/CMakeLists.txt b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/CMakeLists.txt new file mode 100644 index 0000000..9939b6f --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.7) +project(rpath-macho-test CXX) + +set(TEST_STRING "" CACHE STRING "") + +set(CMAKE_SKIP_INSTALL_RPATH TRUE) + +add_library(rpath-macho-backend-lib++ transitive.cpp) +target_compile_definitions(rpath-macho-backend-lib++ PRIVATE "TEST_STRING=\"${TEST_STRING}\"") + +add_library(rpath-macho-test-lib lib.cpp) +target_link_libraries(rpath-macho-test-lib PRIVATE rpath-macho-backend-lib++) + +add_executable(rpath-macho-test-tool main.cpp) +target_link_libraries(rpath-macho-test-tool PRIVATE rpath-macho-test-lib) + +install(TARGETS rpath-macho-backend-lib++ rpath-macho-test-lib rpath-macho-test-tool) diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/lib.cpp b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/lib.cpp new file mode 100644 index 0000000..3727a06 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/lib.cpp @@ -0,0 +1,6 @@ +extern const char* getTestStringBackend(); + +const char* getTestString() +{ + return getTestStringBackend(); +} diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/main.cpp b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/main.cpp new file mode 100644 index 0000000..7253b5a --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/main.cpp @@ -0,0 +1,8 @@ +#include <stdio.h> + +extern const char* getTestString(); + +int main() +{ + puts(getTestString()); +} diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/transitive.cpp b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/transitive.cpp new file mode 100644 index 0000000..ab1ca00 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/project/transitive.cpp @@ -0,0 +1,4 @@ +const char* getTestStringBackend() +{ + return TEST_STRING; +} diff --git a/vcpkg/scripts/test_ports/rpath-macho-test-binaries/vcpkg.json b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/vcpkg.json new file mode 100644 index 0000000..8911159 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test-binaries/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "rpath-macho-test-binaries", + "version-string": "ci", + "description": "Provides installed binaries for rpath macho fixup test", + "supports": "native & osx", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/rpath-macho-test/portfile.cmake b/vcpkg/scripts/test_ports/rpath-macho-test/portfile.cmake new file mode 100644 index 0000000..c317fa8 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test/portfile.cmake @@ -0,0 +1,62 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +foreach(dir IN ITEMS tools/rpath-macho-test-binaries manual-tools/rpath-macho-test-binaries) + string(REPLACE "/" "_" logname "execute-rel-${dir}") + vcpkg_execute_required_process( + COMMAND "${CURRENT_INSTALLED_DIR}/${dir}/rpath-macho-test-tool" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + LOGNAME "${logname}" + ) + if(NOT output STREQUAL "release") + message(SEND_ERROR "${dir}: $Actual: '${output}', expected: 'release'") + endif() +endforeach() + +if(NOT VCPKG_BUILD_TYPE) + foreach(dir IN ITEMS tools/rpath-macho-test-binaries/debug manual-tools/rpath-macho-test-binaries/debug debug/tools/rpath-macho-test-binaries) + string(REPLACE "/" "_" logname "execute-dbg-${dir}") + vcpkg_execute_required_process( + COMMAND "${CURRENT_INSTALLED_DIR}/${dir}/rpath-macho-test-tool" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + LOGNAME "${logname}" + ) + if(NOT output STREQUAL "debug") + message(SEND_ERROR "${dir}: Actual: '${output}', expected: 'debug'") + endif() + endforeach() +endif() + +function(check_proper_rpath macho_lib) + vcpkg_execute_required_process( + COMMAND "otool" "-L" "${macho_lib}" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + LOGNAME "${logname}" + ) + + set(found_rpath_backend_lib OFF) + + string(REPLACE "\n" ";" output_lines "${output}") + # Ignore first line, it contains the path to the lib which we are checking + list(REMOVE_AT output_lines 0) + foreach(line IN LISTS output_lines) + if("${line}" MATCHES "\\s+/.*librpath-macho-backend-lib\\+\\+\\.dylib") + message(SEND_ERROR "${line} contains an absolute path") + endif() + if("${line}" MATCHES "@rpath/librpath-macho-backend-lib\\+\\+.dylib") + set(found_rpath_backend_lib ON) + endif() + endforeach() + + if(NOT found_rpath_backend_lib) + message(SEND_ERROR "@rpath/librpath-macho-backend-lib++.dylib not found in ${output}") + endif() +endfunction() + +check_proper_rpath("${CURRENT_INSTALLED_DIR}/lib/librpath-macho-test-lib.dylib") +check_proper_rpath("${CURRENT_INSTALLED_DIR}/debug/lib/librpath-macho-test-lib.dylib") diff --git a/vcpkg/scripts/test_ports/rpath-macho-test/vcpkg.json b/vcpkg/scripts/test_ports/rpath-macho-test/vcpkg.json new file mode 100644 index 0000000..c7c70c0 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-macho-test/vcpkg.json @@ -0,0 +1,8 @@ +{ + "name": "rpath-macho-test", + "version-string": "ci", + "description": "Test rpath macho fixup", + "dependencies": [ + "rpath-macho-test-binaries" + ] +} diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/portfile.cmake b/vcpkg/scripts/test_ports/rpath-test-binaries/portfile.cmake new file mode 100644 index 0000000..0326a30 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/portfile.cmake @@ -0,0 +1,29 @@ +set(VCPKG_POLICY_EMPTY_INCLUDE_FOLDER enabled) +vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS_RELEASE + -DTEST_STRING=release + OPTIONS_DEBUG + -DTEST_STRING=debug +) +vcpkg_cmake_install() + +if(NOT VCPKG_BUILD_TYPE) + vcpkg_copy_tools(TOOL_NAMES rpath-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/debug/tools/${PORT}" + ) + vcpkg_copy_tools(TOOL_NAMES rpath-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/manual-tools/${PORT}/debug" + ) + vcpkg_copy_tools(TOOL_NAMES rpath-test-tool + SEARCH_DIR "${CURRENT_PACKAGES_DIR}/debug/bin" + DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug" + ) +endif() +vcpkg_copy_tools(TOOL_NAMES rpath-test-tool DESTINATION "${CURRENT_PACKAGES_DIR}/manual-tools/${PORT}") +vcpkg_copy_tools(TOOL_NAMES rpath-test-tool AUTO_CLEAN) +file(WRITE "${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright" "This test port is part of vcpkg.") diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/project/CMakeLists.txt b/vcpkg/scripts/test_ports/rpath-test-binaries/project/CMakeLists.txt new file mode 100644 index 0000000..1e6fb0c --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/project/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.7) +project(rpath-test CXX) + +set(TEST_STRING "" CACHE STRING "") + +set(CMAKE_SKIP_INSTALL_RPATH TRUE) + +add_library(rpath-backend-lib transitive.cpp) +target_compile_definitions(rpath-backend-lib PRIVATE "TEST_STRING=\"${TEST_STRING}\"") + +add_library(rpath-test-lib lib.cpp) +target_link_libraries(rpath-test-lib PRIVATE rpath-backend-lib) + +add_executable(rpath-test-tool main.cpp) +target_link_libraries(rpath-test-tool PRIVATE rpath-test-lib) + +install(TARGETS rpath-backend-lib rpath-test-lib rpath-test-tool) diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/project/lib.cpp b/vcpkg/scripts/test_ports/rpath-test-binaries/project/lib.cpp new file mode 100644 index 0000000..3727a06 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/project/lib.cpp @@ -0,0 +1,6 @@ +extern const char* getTestStringBackend(); + +const char* getTestString() +{ + return getTestStringBackend(); +} diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/project/main.cpp b/vcpkg/scripts/test_ports/rpath-test-binaries/project/main.cpp new file mode 100644 index 0000000..7253b5a --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/project/main.cpp @@ -0,0 +1,8 @@ +#include <stdio.h> + +extern const char* getTestString(); + +int main() +{ + puts(getTestString()); +} diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/project/transitive.cpp b/vcpkg/scripts/test_ports/rpath-test-binaries/project/transitive.cpp new file mode 100644 index 0000000..ab1ca00 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/project/transitive.cpp @@ -0,0 +1,4 @@ +const char* getTestStringBackend() +{ + return TEST_STRING; +} diff --git a/vcpkg/scripts/test_ports/rpath-test-binaries/vcpkg.json b/vcpkg/scripts/test_ports/rpath-test-binaries/vcpkg.json new file mode 100644 index 0000000..bf52bd7 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test-binaries/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "rpath-test-binaries", + "version-string": "ci", + "description": "Provides installed binaries for rpath fixup test", + "supports": "native & !windows", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/rpath-test/portfile.cmake b/vcpkg/scripts/test_ports/rpath-test/portfile.cmake new file mode 100644 index 0000000..481a935 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test/portfile.cmake @@ -0,0 +1,31 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +foreach(dir IN ITEMS tools/rpath-test-binaries manual-tools/rpath-test-binaries) + string(REPLACE "/" "_" logname "execute-rel-${dir}") + vcpkg_execute_required_process( + COMMAND "${CURRENT_INSTALLED_DIR}/${dir}/rpath-test-tool" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + LOGNAME "${logname}" + ) + if(NOT output STREQUAL "release") + message(SEND_ERROR "${dir}: $Actual: '${output}', expected: 'release'") + endif() +endforeach() + +if(NOT VCPKG_BUILD_TYPE) + foreach(dir IN ITEMS tools/rpath-test-binaries/debug manual-tools/rpath-test-binaries/debug debug/tools/rpath-test-binaries) + string(REPLACE "/" "_" logname "execute-dbg-${dir}") + vcpkg_execute_required_process( + COMMAND "${CURRENT_INSTALLED_DIR}/${dir}/rpath-test-tool" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + OUTPUT_VARIABLE output + OUTPUT_STRIP_TRAILING_WHITESPACE + LOGNAME "${logname}" + ) + if(NOT output STREQUAL "debug") + message(SEND_ERROR "${dir}: Actual: '${output}', expected: 'debug'") + endif() + endforeach() +endif() diff --git a/vcpkg/scripts/test_ports/rpath-test/vcpkg.json b/vcpkg/scripts/test_ports/rpath-test/vcpkg.json new file mode 100644 index 0000000..7136d04 --- /dev/null +++ b/vcpkg/scripts/test_ports/rpath-test/vcpkg.json @@ -0,0 +1,8 @@ +{ + "name": "rpath-test", + "version-string": "ci", + "description": "Test rpath fixup", + "dependencies": [ + "rpath-test-binaries" + ] +} diff --git a/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/portfile.cmake b/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/vcpkg.json b/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/vcpkg.json new file mode 100644 index 0000000..1a4bdb6 --- /dev/null +++ b/vcpkg/scripts/test_ports/sqlpp11-connector-mysql/vcpkg.json @@ -0,0 +1,26 @@ +{ + "name": "sqlpp11-connector-mysql", + "version-string": "ci", + "description": "Overlay for an obsolete empty port in order to unblock sqlpp11 testing: platform-specific choice of testable implementation", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "supports": "!uwp", + "dependencies": [ + { + "name": "sqlpp11", + "default-features": false, + "features": [ + "mariadb" + ], + "platform": "x86 & windows" + }, + { + "name": "sqlpp11", + "default-features": false, + "features": [ + "mysql" + ], + "platform": "!(x86 & windows)" + } + ] +} diff --git a/vcpkg/scripts/test_ports/try-compile/CMakeLists.txt b/vcpkg/scripts/test_ports/try-compile/CMakeLists.txt new file mode 100644 index 0000000..1d1d93a --- /dev/null +++ b/vcpkg/scripts/test_ports/try-compile/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.25)
+
+project(try-compile-test LANGUAGES C CXX)
+
+try_compile(result PROJECT test-try-compile SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/try")
+
+if(NOT result)
+ message(FATAL_ERROR "Compiler flags are not passed consistently to try_compile!")
+endif()
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/try-compile/portfile.cmake b/vcpkg/scripts/test_ports/try-compile/portfile.cmake new file mode 100644 index 0000000..b7c364e --- /dev/null +++ b/vcpkg/scripts/test_ports/try-compile/portfile.cmake @@ -0,0 +1,9 @@ +
+string(APPEND VCPKG_C_FLAGS " -DVCPKG_LET_ME_PASS")
+string(APPEND VCPKG_CXX_FLAGS " -DVCPKG_LET_ME_PASS")
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CMAKE_CURRENT_LIST_DIR}"
+)
+
+set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/try-compile/try/CMakeLists.txt b/vcpkg/scripts/test_ports/try-compile/try/CMakeLists.txt new file mode 100644 index 0000000..d5f1696 --- /dev/null +++ b/vcpkg/scripts/test_ports/try-compile/try/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.25)
+
+project(try-compile-project LANGUAGES C CXX)
+
+add_library(result "${CMAKE_CURRENT_SOURCE_DIR}/try-compile.c")
+
diff --git a/vcpkg/scripts/test_ports/try-compile/try/try-compile.c b/vcpkg/scripts/test_ports/try-compile/try/try-compile.c new file mode 100644 index 0000000..d3d6712 --- /dev/null +++ b/vcpkg/scripts/test_ports/try-compile/try/try-compile.c @@ -0,0 +1,5 @@ +
+
+#if !defined(VCPKG_LET_ME_PASS)
+ #error "You shall not pass without forwarding compiler flags to try_compile!"
+#endif
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/try-compile/vcpkg.json b/vcpkg/scripts/test_ports/try-compile/vcpkg.json new file mode 100644 index 0000000..8ccd705 --- /dev/null +++ b/vcpkg/scripts/test_ports/try-compile/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "try-compile", + "version": "1", + "description": "Test if try compile correctly passes on compiler flags", + "license": "MIT", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/portfile.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/portfile.cmake new file mode 100644 index 0000000..0dc09c5 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/portfile.cmake @@ -0,0 +1,41 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+if(NOT VCPKG_CROSSCOMPILING)
+ file(INSTALL "${CURRENT_PORT_DIR}/test-macros.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
+endif()
+
+include("${CURRENT_PORT_DIR}/test-macros.cmake")
+
+if("minimum-required" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_minimum_required.cmake")
+endif()
+if("list" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_list.cmake")
+endif()
+if("host-path-list" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_host_path_list.cmake")
+endif()
+if("function-arguments" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_function_arguments.cmake")
+endif()
+if("merge-libs" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_cmake_config_fixup_merge.cmake")
+endif()
+if("backup-restore-env-vars" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_backup_restore_env_vars.cmake")
+endif()
+if("setup-pkgconfig-path" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_setup_pkgconfig_path.cmake")
+endif()
+if("fixup-pkgconfig" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_fixup_pkgconfig.cmake")
+endif()
+if("fixup-rpath" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_calculate_corrected_rpath.cmake")
+ include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_calculate_corrected_rpath_macho.cmake")
+endif()
+if("execute-required-process" IN_LIST FEATURES)
+ include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg_execute_required_process.cmake")
+endif()
+
+unit_test_report_result()
diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-macros.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-macros.cmake new file mode 100644 index 0000000..af5fc7f --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-macros.cmake @@ -0,0 +1,173 @@ +include_guard(GLOBAL) + +function(set_fatal_error err) + set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "ON" CACHE BOOL "" FORCE) + set(Z_VCPKG_UNIT_TEST_FATAL_ERROR "${err}" CACHE STRING "" FORCE) +endfunction() +function(unset_fatal_error) + set(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR "OFF" CACHE BOOL "" FORCE) +endfunction() +function(set_has_error) + set(Z_VCPKG_UNIT_TEST_HAS_ERROR ON CACHE BOOL "" FORCE) +endfunction() + +macro(message level msg) + if("${level}" STREQUAL "FATAL_ERROR") + set_fatal_error("${msg}") + return() + else() + _message("${level}" "${msg}") # note: this results in incorrect printing, but that's fine + # message(STATUS "\${asdf}") will result in + # message(STATUS "${asdf}"), since that's how macro arguments work. + endif() +endmacro() + +# Call this at the end of testing. +macro(unit_test_report_result) + if(Z_VCPKG_UNIT_TEST_HAS_ERROR) + _message(FATAL_ERROR "At least one test failed") + endif() +endmacro() + +set(Z_VCPKG_UNIT_TEST_HAS_ERROR OFF CACHE BOOL "" FORCE) +unset_fatal_error() + +# Set <namespace>_MATCHED, preserve parent scope's CMAKE_MATCH_<...> +function(unit_test_match namespace value regex) + if("${value}" MATCHES "${regex}") + set("${namespace}_MATCHED" ON PARENT_SCOPE) + if("${CMAKE_MATCH_COUNT}" EQUAL "0") + return() + endif() + + foreach(match RANGE 1 "${CMAKE_MATCH_COUNT}") + set("${namespace}_CMAKE_MATCH_${match}" "${CMAKE_MATCH_${match}}" PARENT_SCOPE) + endforeach() + else() + set("${namespace}_MATCHED" OFF PARENT_SCOPE) + endif() +endfunction() + +function(unit_test_check_variable_unset utcvu_test utcvu_variable) + cmake_language(EVAL CODE "${utcvu_test}") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + unset_fatal_error() + set_has_error() + message(SEND_ERROR "${utcvu_test} had an unexpected FATAL_ERROR; + expected: \"${utcvu_value}\"") + message(SEND_ERROR "FATAL_ERROR: ${Z_VCPKG_UNIT_TEST_FATAL_ERROR}") + return() + endif() + + unit_test_match(utcvu "${utcvu_variable}" [[^(ENV|CACHE)\{(.*)\}$]]) + if(utcvu_MATCHED) + message(STATUS "utcvu_variable: ${utcvu_CMAKE_MATCH_2}") + if("${utcvu_CMAKE_MATCH_1}" STREQUAL "ENV") + set(utcvu_actual_value "$ENV{${utcvu_CMAKE_MATCH_2}}") + elseif("${utcvu_CMAKE_MATCH_1}" STREQUAL "CACHE") + set(utcvu_actual_value "$CACHE{${utcvu_CMAKE_MATCH_2}}") + else() + _message(FATAL_ERROR "unexpected value for CMAKE_MATCH_1: ${utcvu_CMAKE_MATCH_1}") + endif() + else() + set(utcvu_actual_value "${${utcvu_variable}}") + endif() + + if(DEFINED "${utcvu_variable}") + message(SEND_ERROR "${utcvu_test} set ${utcvu_variable}; + expected: \"${utcvu_variable}\" unset + actual : \"${utcvu_actual_value}\"") + set_has_error() + return() + endif() +endfunction() + +function(unit_test_check_variable_equal utcve_test utcve_variable utcve_value) + cmake_language(EVAL CODE "${utcve_test}") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + unset_fatal_error() + set_has_error() + message(SEND_ERROR "${utcve_test} had an unexpected FATAL_ERROR; + expected: \"${utcve_value}\"") + message(SEND_ERROR "FATAL_ERROR: ${Z_VCPKG_UNIT_TEST_FATAL_ERROR}") + return() + endif() + + unit_test_match(utcve "${utcve_variable}" "^ENV\\{") + if(NOT DEFINED "${utcve_variable}" AND NOT utcve_MATCHED) + message(SEND_ERROR "${utcve_test} failed to set ${utcve_variable}; + expected: \"${utcve_value}\"") + set_has_error() + return() + endif() + + unit_test_match(utcve "${utcve_variable}" [[^(ENV|CACHE)\{(.*)\}$]]) + if(utcve_MATCHED) + if("${utcve_CMAKE_MATCH_1}" STREQUAL "ENV") + set(utcve_actual_value "$ENV{${utcve_CMAKE_MATCH_2}}") + elseif("${utcve_CMAKE_MATCH_1}" STREQUAL "CACHE") + set(utcve_actual_value "$CACHE{${utcve_CMAKE_MATCH_2}}") + else() + _message(FATAL_ERROR "unexpected value for CMAKE_MATCH_1: ${utcve_CMAKE_MATCH_1}") + endif() + else() + set(utcve_actual_value "${${utcve_variable}}") + endif() + + if(NOT "${utcve_actual_value}" STREQUAL "${utcve_value}") + message(SEND_ERROR "${utcve_test} resulted in the wrong value for ${utcve_variable}; + expected: \"${utcve_value}\" + actual : \"${utcve_actual_value}\"") + set_has_error() + return() + endif() +endfunction() + +function(unit_test_check_variable_not_equal utcve_test utcve_variable utcve_value) + cmake_language(EVAL CODE "${utcve_test}") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + unset_fatal_error() + set_has_error() + message(SEND_ERROR "${utcve_test} had an unexpected FATAL_ERROR; + expected: \"${utcve_value}\"") + message(SEND_ERROR "FATAL_ERROR: ${Z_VCPKG_UNIT_TEST_FATAL_ERROR}") + return() + endif() + + unit_test_match(utcve "${utcve_variable}" [[^(ENV|CACHE)\{(.*)\}$]]) + if(utcve_MATCHED) + if("${utcve_CMAKE_MATCH_1}" STREQUAL "ENV") + set(utcve_actual_value "$ENV{${utcve_CMAKE_MATCH_2}}") + elseif("${utcve_CMAKE_MATCH_1}" STREQUAL "CACHE") + set(utcve_actual_value "$CACHE{${utcve_CMAKE_MATCH_2}}") + else() + _message(FATAL_ERROR "unexpected value for CMAKE_MATCH_1: ${utcve_CMAKE_MATCH_1}") + endif() + else() + set(utcve_actual_value "${${utcve_variable}}") + endif() + + if("${utcve_actual_value}" STREQUAL "${utcve_value}") + message(SEND_ERROR "${utcve_test} failed to change ${utcve_variable}; + unchanged: \"${utcve_value}\"") + set_has_error() + return() + endif() +endfunction() + +function(unit_test_ensure_success utcve_test) + cmake_language(EVAL CODE "${utcve_test}") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + set_has_error() + message(SEND_ERROR "${utcve_test} was expected to be successful.") + endif() + unset_fatal_error() +endfunction() +function(unit_test_ensure_fatal_error utcve_test) + cmake_language(EVAL CODE "${utcve_test}") + if(NOT Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + set_has_error() + message(SEND_ERROR "${utcve_test} was expected to be a FATAL_ERROR.") + endif() + unset_fatal_error() +endfunction() diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_backup_restore_env_vars.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_backup_restore_env_vars.cmake new file mode 100644 index 0000000..ae010b3 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_backup_restore_env_vars.cmake @@ -0,0 +1,38 @@ +# vcpkg_backup_env_variables(VARS <list>) +# vcpkg_restore_env_variables(VARS <list>) +# These functions used scoped variables and cannot be called in unit_test_check_*. + +set(ENV{A} [[::a;::b]]) +set(ENV{B} [[]]) + +# Backup doesn't change variables. +vcpkg_backup_env_variables(VARS A B) +unit_test_check_variable_equal([[]] ENV{A} [[::a;::b]]) +unit_test_check_variable_equal([[]] ENV{B} [[]]) + +# Restore restores. +set(ENV{A} [[::a;::b;::c]]) +set(ENV{B} [[::1]]) +vcpkg_restore_env_variables(VARS A B) +unit_test_check_variable_equal([[]] ENV{A} [[::a;::b]]) +unit_test_check_variable_equal([[]] ENV{B} [[]]) + +# Restore can be called more than once. +set(ENV{A} [[::a;::b;::c]]) +set(ENV{B} [[::1]]) +vcpkg_restore_env_variables(VARS A B) +unit_test_check_variable_equal([[]] ENV{A} [[::a;::b]]) +unit_test_check_variable_equal([[]] ENV{B} [[]]) + +# Backups are scoped. +function(change_and_backup) + set(ENV{A} [[::a;::b;::c]]) + set(ENV{B} [[::1]]) + vcpkg_backup_env_variables(VARS A B) + # no further change, no restore, in this scope +endfunction() +vcpkg_backup_env_variables(VARS A B) +change_and_backup() +vcpkg_restore_env_variables(VARS A B) +unit_test_check_variable_equal([[]] ENV{A} [[::a;::b]]) +unit_test_check_variable_equal([[]] ENV{B} [[]]) diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_execute_required_process.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_execute_required_process.cmake new file mode 100644 index 0000000..ff767c3 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_execute_required_process.cmake @@ -0,0 +1,189 @@ +# vcpkg_execute_required_process +#[[ + "ALLOW_IN_DOWNLOAD_MODE;OUTPUT_STRIP_TRAILING_WHITESPACE;ERROR_STRIP_TRAILING_WHITESPACE" + "WORKING_DIRECTORY;LOGNAME;TIMEOUT;OUTPUT_VARIABLE;ERROR_VARIABLE" + "COMMAND;SAVE_LOG_FILES" +]] + +block(SCOPE_FOR VARIABLES) + +set(logname "test-vcpkg_execute_required_process") + +function(count_log_files out_var) + set(count 0) + if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-out.log") + math(EXPR count "${count} + 1") + endif() + if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-err.log") + math(EXPR count "${count} + 1") + endif() + if(EXISTS "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log") + math(EXPR count "${count} + 1") + endif() + set("${out_var}" "${count}" PARENT_SCOPE) +endfunction() + +function(reset_log_files) + file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-out.log") + file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-err.log") + file(REMOVE "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log") +endfunction() + + +# ALLOW_IN_DOWNLOAD_MODE + +set(VCPKG_DOWNLOAD_MODE 1) +unit_test_ensure_success([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Success + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + ALLOW_IN_DOWNLOAD_MODE + )]] +) +unit_test_ensure_fatal_error([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Success + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + )]] +) + +set(VCPKG_DOWNLOAD_MODE "") +unit_test_ensure_success([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Success + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + ALLOW_IN_DOWNLOAD_MODE + )]] +) +unit_test_ensure_success([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Success + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + )]] +) + + +# COMMAND, LOGNAME + +reset_log_files() +unit_test_check_variable_equal([[count_log_files(count)]] count 0) + +unit_test_ensure_success([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Hello world + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + )]] +) +unit_test_check_variable_equal([[ count_log_files(count) ]] count 2) +unit_test_check_variable_equal([[ file(STRINGS "${CURRENT_BUILDTREES_DIR}/${logname}-out.log" stdout) ]] stdout "Hello world") + + +# WORKING_DIRECTORY, SAVE_LOG_FILES + +file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/subdir") +file(MAKE_DIRECTORY "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/subdir") +file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/source" "extra log") +file(REMOVE_RECURSE "${CURRENT_BUILDTREES_DIR}/subdir") + +reset_log_files() +unit_test_check_variable_equal([[count_log_files(count)]] count 0) + +unit_test_ensure_success([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E rename source subdir/extra.log + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir" + LOGNAME "${logname}" + SAVE_LOG_FILES "subdir/extra.log" + )]] +) +unit_test_check_variable_equal([[ count_log_files(count) ]] count 3) +unit_test_check_variable_equal([[ file(STRINGS "${CURRENT_BUILDTREES_DIR}/${logname}-extra.log" extra) ]] extra "extra log") + + +# OUTPUT_VARIABLE, OUTPUT_STRIP_TRAILING_WHITESPACE + +reset_log_files() +unit_test_check_variable_equal([[count_log_files(count)]] count 0) + +unit_test_check_variable_equal([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Hello world + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + OUTPUT_VARIABLE outvar + )]] + outvar "Hello world\n" +) +unit_test_check_variable_equal([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E echo Hello world + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + OUTPUT_VARIABLE outvar + OUTPUT_STRIP_TRAILING_WHITESPACE + )]] + outvar "Hello world" +) +unit_test_check_variable_equal([[ count_log_files(count) ]] count 2) + + +# ERROR_VARIABLE + +reset_log_files() +unit_test_check_variable_equal([[count_log_files(count)]] count 0) + +file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/stderr.cmake" "message(WARNING on-stderr)\n") +unit_test_check_variable_not_equal([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -P "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/stderr.cmake" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + ERROR_VARIABLE outvar + ) + string(FIND "${outvar}" "on-stderr" pos) + ]] pos -1 +) +unit_test_check_variable_equal([[ count_log_files(count) ]] count 2) + + +# OUTPUT_VARIABLE == ERROR_VARIABLE + +reset_log_files() +unit_test_check_variable_equal([[count_log_files(count)]] count 0) + +file(WRITE "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/combined.cmake" [[ + message(WARNING on-stderr) + message(STATUS on-stdout) +]]) +unit_test_check_variable_not_equal([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -P "${CURRENT_BUILDTREES_DIR}/vcpkg_execute_required_process-dir/combined.cmake" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + OUTPUT_VARIABLE outvar + ERROR_VARIABLE outvar + ) + string(REGEX MATCH "on-stderr.*on-stdout" match "${outvar}") + ]] CMAKE_MATCH_0 "" +) +unit_test_check_variable_equal([[ count_log_files(count) ]] count 2) + + +# TIMEOUT (if not flaky) + +unit_test_ensure_fatal_error([[ + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -E sleep 10 + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "${logname}" + TIMEOUT 1 + )]] +) + + +endblock() diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_fixup_pkgconfig.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_fixup_pkgconfig.cmake new file mode 100644 index 0000000..758594b --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_fixup_pkgconfig.cmake @@ -0,0 +1,202 @@ +file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/lib/pkgconfig") +set(pc_file_release "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/unit-test-cmake.pc") +if(NOT VCPKG_BUILD_TYPE) + file(MAKE_DIRECTORY "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig") + set(pc_file_debug "${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig/unit-test-cmake.pc") +endif() +set(reload_pc_strings 0) + +function(write_pkgconfig) + file(WRITE "${pc_file_release}" ${ARGN}) + if(NOT VCPKG_BUILD_TYPE) + file(WRITE "${pc_file_debug}" ${ARGN}) + endif() + file(STRINGS "${pc_file_release}" pc_strings_input) + set(pc_strings_INPUT "${pc_strings_input}" PARENT_SCOPE) + set(reload_pc_strings 1 PARENT_SCOPE) +endfunction() + +function(unit_test_pkgconfig_check_key build_types field value) + if(NOT build_types) + message(SEND_ERROR "The build_type parameter must be list of debug;release.") + endif() + if(VCPKG_BUILD_TYPE) + list(REMOVE_ITEM build_types debug) + endif() + if(NOT build_types) + return() + endif() + if(reload_pc_strings) + file(STRINGS "${pc_file_release}" pc_strings_release) + set(pc_strings_release "${pc_strings_release}" PARENT_SCOPE) + if(NOT VCPKG_BUILD_TYPE) + file(STRINGS "${pc_file_debug}" pc_strings_debug) + set(pc_strings_debug "${pc_strings_debug}" PARENT_SCOPE) + endif() + set(reload_pc_strings 0 PARENT_SCOPE) + endif() + foreach(build_type IN LISTS build_types) + set(listname "pc_strings_${build_type}") + set(expected "${field}${value}") + list(FILTER ${listname} INCLUDE REGEX "^${field}") + if(NOT "${${listname}}" STREQUAL "${expected}" AND NOT "${${listname}}_is_empty" STREQUAL "${value}_is_empty") + string(REPLACE "\$" "\\\$" pc_strings_INPUT "${pc_strings_INPUT}") + string(REPLACE "\$" "\\\$" expected "${expected}") + string(REPLACE "\$" "\\\$" "${listname}" "${${listname}}") + message(SEND_ERROR "vcpkg_fixup_pkgconfig() resulted in a wrong value for ${build_type} builds; + input : [[${pc_strings_INPUT}]] + expected: [[${expected}]] + actual : [[${${listname}}]]") + set_has_error() + return() + endif() + endforeach() +endfunction() + +# "Libs:" only +write_pkgconfig([[ +Libs: -L${prefix}/lib -l"aaa" +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa]]) + +# "Libs:" and "Libs.private:" +write_pkgconfig([[ +Libs: -L"${prefix}/lib" -l"aaa" +Libs.private: -l"bbb ccc" +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa "-lbbb ccc"]]) + unit_test_pkgconfig_check_key("debug;release" "Libs.private:" "") +else() + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa]]) +endif() + +# line continuations +write_pkgconfig([[ +Libs.private: \ + -lbbb +Libs: -L"${prefix}/lib" \ + -l"aaa" +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa -lbbb]]) + unit_test_pkgconfig_check_key("debug;release" "Libs.private:" "") +else() + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa]]) +endif() + +# Replace ';' with ' ' +write_pkgconfig([[ +Libs: -L${prefix}/lib\;-l"aaa" +Libs.private: -lbbb\;-l"ccc" +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa -lbbb -lccc]]) + unit_test_pkgconfig_check_key("debug;release" "Libs.private:" "") +else() + unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -laaa]]) +endif() + +# invalid: ...-NOTFOUND +write_pkgconfig([[Libs: LIB-NOTFOUND]]) +# Only warning: unit_test_ensure_fatal_error([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) # ...-NOTFOUND # ]]) + +# invalid: optimized/debug +write_pkgconfig([[Libs: -laaa -loptimized -lrel -ldebug -ldbg -lbbb]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug" "Libs:" [[ -laaa -ldbg -lbbb]]) +unit_test_pkgconfig_check_key("release" "Libs:" [[ -laaa -lrel -lbbb]]) + +write_pkgconfig([[Libs: -laaa -Loptimized -Lrel -Ldebug -Ldbg -lbbb]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug" "Libs:" [[ -laaa -Ldbg -lbbb]]) +unit_test_pkgconfig_check_key("release" "Libs:" [[ -laaa -Lrel -lbbb]]) + +write_pkgconfig([[Libs: optimized\;librel.a\;debug\;libdbg.a\;aaa.lib]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug" "Libs:" [[ libdbg.a aaa.lib]]) +unit_test_pkgconfig_check_key("release" "Libs:" [[ librel.a aaa.lib]]) + +write_pkgconfig([[Libs: aaa.lib\;optimized\;librel.a\;debug\;libdbg.a]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug" "Libs:" [[ aaa.lib libdbg.a]]) +unit_test_pkgconfig_check_key("release" "Libs:" [[ aaa.lib librel.a]]) + +write_pkgconfig([[Libs: aaa.lib optimized librel.a debug libdbg.a bbb.lib]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug" "Libs:" [[ aaa.lib libdbg.a bbb.lib]]) +unit_test_pkgconfig_check_key("release" "Libs:" [[ aaa.lib librel.a bbb.lib]]) + +# invalid: namespaced targets +write_pkgconfig([[Libs: -lAAA::aaa]]) +# Only warning: unit_test_ensure_fatal_error([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) # namespaced target # ]]) + +# prefix +write_pkgconfig( +"prefix=${CURRENT_PACKAGES_DIR} +execprefix=\${prefix} +libdir=${CURRENT_PACKAGES_DIR}/lib +includedir=${CURRENT_PACKAGES_DIR}/include +datarootdir=${CURRENT_PACKAGES_DIR}/share +datadir=\${datarootdir}/${PORT} +") +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("release" "prefix=" [[${pcfiledir}/../..]]) +unit_test_pkgconfig_check_key("release" "execprefix=" [[${prefix}]]) +unit_test_pkgconfig_check_key("release" "libdir=" [[${prefix}/lib]]) +unit_test_pkgconfig_check_key("release" "includedir=" [[${prefix}/include]]) +unit_test_pkgconfig_check_key("release" "datarootdir=" [[${prefix}/share]]) +unit_test_pkgconfig_check_key("release" "datadir=" [[${datarootdir}/unit-test-cmake]]) + +if(NOT VCPKG_BUILD_TYPE) + write_pkgconfig( +"prefix=${CURRENT_PACKAGES_DIR}/debug +execprefix=\${prefix} +libdir=${CURRENT_PACKAGES_DIR}/debug/lib +includedir=${CURRENT_PACKAGES_DIR}/include +datarootdir=${CURRENT_PACKAGES_DIR}/share +datadir=\${datarootdir}/${PORT} +") + unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) + unit_test_pkgconfig_check_key("debug" "prefix=" [[${pcfiledir}/../..]]) + unit_test_pkgconfig_check_key("debug" "execprefix=" [[${prefix}]]) + unit_test_pkgconfig_check_key("debug" "libdir=" [[${prefix}/lib]]) + unit_test_pkgconfig_check_key("debug" "includedir=" [[${prefix}/../include]]) + unit_test_pkgconfig_check_key("debug" "datarootdir=" [[${prefix}/../share]]) + unit_test_pkgconfig_check_key("debug" "datadir=" [[${datarootdir}/unit-test-cmake]]) +endif() + +# -I, -l or -L with ${blah} in variables +write_pkgconfig([[blah_libs=-L${blah}/lib64 -l${blah}/libblah.a -I${blah}/include]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "blah_libs=" [["-L${blah}/lib64" "-l${blah}/libblah.a" "-I${blah}/include"]]) + +# plain vs. quoted items +write_pkgconfig([[Libs: ${blah} "${quoted}" plain "C:/Program Files/blah.lib"]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ ${blah} "${quoted}" plain "C:/Program Files/blah.lib"]]) + +# lib spec starting with optimized/debug/general +write_pkgconfig([[ +Libs: -L${prefix}/lib -ldebuginfod +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -ldebuginfod]]) + +write_pkgconfig([[ +Libs: -L${prefix}/lib -loptimizedinfod +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -loptimizedinfod]]) + +write_pkgconfig([[ +Libs: -L${prefix}/lib -lgeneralinfod +]]) +unit_test_ensure_success([[ vcpkg_fixup_pkgconfig(SKIP_CHECK) ]]) +unit_test_pkgconfig_check_key("debug;release" "Libs:" [[ "-L${prefix}/lib" -lgeneralinfod]]) + +file(REMOVE_RECURSE "${pc_file_release}" "${pc_file_debug}") diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake new file mode 100644 index 0000000..a7d5a58 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_host_path_list.cmake @@ -0,0 +1,329 @@ +# CACHE{var} is a fatal error
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND CACHE{var})]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND CACHE{var})]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND CACHE{var} c d)]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND CACHE{var} c d)]])
+
+# regular variable
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND var "a;b")]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND var "a;b")]])
+
+set(var "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var d e)]]
+ var "a;b;d;e"
+)
+set(var "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var)]]
+ var "a;b"
+)
+set(var "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var d e)]]
+ var "d;e;a;b"
+)
+set(var "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var)]]
+ var "a;b"
+)
+
+set(var "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var d e)]]
+ var "d;e"
+)
+set(var "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var)]]
+ var ""
+)
+set(var "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var d e)]]
+ var "d;e"
+)
+set(var "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var)]]
+ var ""
+)
+
+unset(var)
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var d e)]]
+ var "d;e"
+)
+unset(var)
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND var)]]
+ var ""
+)
+unset(var)
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var d e)]]
+ var "d;e"
+)
+unset(var)
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND var)]]
+ var ""
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
+
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND var "a:b")]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND var "a:b")]])
+
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "a:b:d:e"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} "a:b"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e:a:b"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} "a:b"
+)
+
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} ""
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} ""
+)
+
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} ""
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} ""
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
+
+# environment ENV{var}iable
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND ENV{ENV{var}} "a;b")]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND ENV{ENV{var}} "a;b")]])
+
+set(ENV{ENV{var}} "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "a;b;d;e"
+)
+set(ENV{ENV{var}} "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]]
+ ENV{ENV{var}} "a;b"
+)
+set(ENV{ENV{var}} "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "d;e;a;b"
+)
+set(ENV{ENV{var}} "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{ENV{var}})]]
+ ENV{ENV{var}} "a;b"
+)
+
+set(ENV{ENV{var}} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "d;e"
+)
+set(ENV{ENV{var}} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]]
+ ENV{ENV{var}} ""
+)
+set(ENV{ENV{var}} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "d;e"
+)
+set(ENV{ENV{var}} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{ENV{var}} ""
+)
+
+unset(ENV{ENV{var}})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "d;e"
+)
+unset(ENV{ENV{var}})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{ENV{var}})]]
+ ENV{ENV{var}} ""
+)
+unset(ENV{ENV{var}})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{ENV{var}} d e)]]
+ ENV{ENV{var}} "d;e"
+)
+unset(ENV{ENV{var}})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{ENV{var}})]]
+ ENV{ENV{var}} ""
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
+
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(APPEND ENV{var} "a:b")]])
+unit_test_ensure_fatal_error([[vcpkg_host_path_list(PREPEND ENV{var} "a:b")]])
+
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "a:b:d:e"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} "a:b"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e:a:b"
+)
+set(ENV{var} "a:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} "a:b"
+)
+
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} ""
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+set(ENV{var} "")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} ""
+)
+
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(APPEND ENV{var})]]
+ ENV{var} ""
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var} d e)]]
+ ENV{var} "d:e"
+)
+unset(ENV{var})
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(PREPEND ENV{var})]]
+ ENV{var} ""
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
+
+# REMOVE_DUPLICATES
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+
+set(var "a;b;c;c:c")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a;b;c;c:c"
+)
+
+set(var "a;b;c;b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a;b;c"
+)
+
+set(var "a;b;a;d")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a;b;d"
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ";")
+if(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
+
+set(var "a:b:c:c;c")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a:b:c:c;c"
+)
+
+set(var "a:b:c:b")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a:b:c"
+)
+
+set(var "a:b:a:d")
+unit_test_check_variable_equal(
+ [[vcpkg_host_path_list(REMOVE_DUPLICATES var)]]
+ var "a:b:d"
+)
+
+endif(VCPKG_HOST_PATH_SEPARATOR STREQUAL ":")
diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_list.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_list.cmake new file mode 100644 index 0000000..c0f3ac8 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_list.cmake @@ -0,0 +1,813 @@ +# vcpkg_list(SET <list> <elements>...)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst "")]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst "" "")]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst a)]]
+ lst "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst a b)]]
+ lst "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SET lst "a;b")]]
+ lst [[a\;b]]
+)
+unit_test_check_variable_equal(
+ [=[vcpkg_list(SET lst "a;b" "c" [[d\;e]])]=]
+ lst [[a\;b;c;d\\;e]]
+)
+
+# vcpkg_list(LENGTH <list> <out-var>)
+set(lst [[]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 0
+)
+set(lst [[;]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 2
+)
+set(lst [[a]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 1
+)
+set(lst [[a;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 2
+)
+set(lst [[a\\;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 1
+)
+set(lst [[a\;b;c\\;d]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(LENGTH lst out)]]
+ out 2
+)
+
+# vcpkg_list(GET <list> <element-index> <out-var>)
+set(lst "")
+unit_test_ensure_fatal_error([[vcpkg_list(GET lst 0 out)]])
+
+set(lst "a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst 0 out)]]
+ out "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst -1 out)]]
+ out "a"
+)
+unit_test_ensure_fatal_error([[vcpkg_list(GET lst 2 out)]])
+unit_test_ensure_fatal_error([[vcpkg_list(GET lst -2 out)]])
+
+set(lst ";b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst 0 out)]]
+ out ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst -1 out)]]
+ out "b"
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst 0 out)]]
+ out "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst -1 out)]]
+ out "b"
+)
+
+set(lst [[a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst 0 out)]]
+ out "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst -1 out)]]
+ out "c"
+)
+
+set(lst [[a;b\;c;d\\;e]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst 1 out)]]
+ out "b;c"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(GET lst -1 out)]]
+ out [[d\;e]]
+)
+
+# vcpkg_list(JOIN <list> <glue> <out-var>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "-" out)]]
+ out ""
+)
+
+set(lst "a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "-" out)]]
+ out "a"
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "-" out)]]
+ out "-"
+)
+
+set(lst [[a;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "-" out)]]
+ out [[a-b]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "+" out)]]
+ out [[a+b]]
+)
+
+set(lst [[a;b\;c\\;d]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(JOIN lst "-" out)]]
+ out [[a-b;c\;d]]
+)
+
+# vcpkg_list(SUBLIST <list> <begin> <length> <out-var>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 0 out)]]
+ out ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 1 out)]]
+ out ""
+)
+unit_test_ensure_fatal_error([[vcpkg_list(SUBLIST lst 1 0 out)]])
+
+set(lst "a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 0 out)]]
+ out ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 1 out)]]
+ out "a"
+)
+unit_test_ensure_fatal_error([[vcpkg_list(SUBLIST lst 2 0 out)]])
+unit_test_ensure_fatal_error([[vcpkg_list(SUBLIST lst 2 1 out)]])
+
+set(lst ";;")
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 0 out)]]
+ out ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 1 out)]]
+ out ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 2 out)]]
+ out ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 0 3 out)]]
+ out ";;"
+)
+
+set(lst "a;b;c;d")
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 1 2 out)]]
+ out "b;c"
+)
+
+set(lst [[a\;b;c\;d;e]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 1 2 out)]]
+ out [[c\;d;e]]
+)
+
+set(lst [[a\;b;c\\;d;e;f;g;h]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(SUBLIST lst 1 -1 out)]]
+ out [[c\\;d;e;f;g;h]]
+)
+
+# vcpkg_list(FIND <list> <value> <out-var>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst "a" out)]]
+ out -1
+)
+
+set(lst "b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst "a" out)]]
+ out -1
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst "a" out)]]
+ out 0
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst b out)]]
+ out 1
+)
+
+set(lst ";b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst "" out)]]
+ out 0
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst b out)]]
+ out 1
+)
+
+set(lst [[a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst "a;b" out)]]
+ out 0
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst c out)]]
+ out 1
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(FIND lst a out)]]
+ out -1
+)
+
+set(lst [[a\\;b;c]])
+unit_test_check_variable_equal(
+ [=[vcpkg_list(FIND lst [[a\;b]] out)]=]
+ out 0
+)
+
+# vcpkg_list(APPEND <list> [<element>...])
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst)]]
+ lst [[]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "")]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "" "")]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst a)]]
+ lst "a"
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst)]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "")]]
+ lst ";;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst b)]]
+ lst ";;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "b;c" d)]]
+ lst [[;;b\;c;d]]
+)
+
+set(lst "a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst)]]
+ lst "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "")]]
+ lst "a;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst b)]]
+ lst "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "b;c" d)]]
+ lst [[a;b\;c;d]]
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst)]]
+ lst "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "")]]
+ lst "a;b;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst c)]]
+ lst "a;b;c"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(APPEND lst "c;d" e)]]
+ lst [[a;b;c\;d;e]]
+)
+unit_test_check_variable_equal(
+ [=[vcpkg_list(APPEND lst [[c\;d]])]=]
+ lst [[a;b;c\\;d]]
+)
+
+# vcpkg_list(PREPEND <list> [<element>...])
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "")]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "" "")]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst a)]]
+ lst "a"
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst)]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "")]]
+ lst ";;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst b)]]
+ lst "b;;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "b;c" d)]]
+ lst [[b\;c;d;;]]
+)
+
+set(lst "a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst)]]
+ lst "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "")]]
+ lst ";a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst b)]]
+ lst "b;a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "b;c" d)]]
+ lst [[b\;c;d;a]]
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst)]]
+ lst "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "")]]
+ lst ";a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst c)]]
+ lst "c;a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(PREPEND lst "c;d" e)]]
+ lst [[c\;d;e;a;b]]
+)
+unit_test_check_variable_equal(
+ [=[vcpkg_list(PREPEND lst [[c\;d]])]=]
+ lst [[c\\;d;a;b]]
+)
+
+# list(INSERT <list> <index> [<element>...])
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0 "")]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0 "" "")]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0 "a")]]
+ lst "a"
+)
+unit_test_ensure_fatal_error([[vcpkg_list(INSERT lst 1 "")]])
+unit_test_ensure_fatal_error([[vcpkg_list(INSERT lst -1 "")]])
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0)]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 1)]]
+ lst ";"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 1 "")]]
+ lst ";;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 0 b)]]
+ lst "b;;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 1 b)]]
+ lst ";b;"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 2 b)]]
+ lst ";;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst -1 "b;c" d)]]
+ lst [[;b\;c;d;]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst -2 "b;c" d)]]
+ lst [[b\;c;d;;]]
+)
+unit_test_ensure_fatal_error([[vcpkg_list(INSERT lst 3 "")]])
+unit_test_ensure_fatal_error([[vcpkg_list(INSERT lst -3 "")]])
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst -1 c)]]
+ lst "a;c;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 1 c)]]
+ lst "a;c;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 2 c)]]
+ lst "a;b;c"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst -2 c)]]
+ lst "c;a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(INSERT lst 1 "c;d")]]
+ lst [[a;c\;d;b]]
+)
+unit_test_check_variable_equal(
+ [=[vcpkg_list(INSERT lst 1 [[c\;d]] e)]=]
+ lst [[a;c\\;d;e;b]]
+)
+
+# vcpkg_list(POP_BACK <list>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst ""
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst ""
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst "a"
+)
+
+set(lst "a;;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst "a;"
+)
+
+set(lst [[a\;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst ""
+)
+
+set(lst [[c;a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst [[c;a\;b]]
+)
+
+# vcpkg_list(POP_FRONT <list>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_BACK lst)]]
+ lst ""
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_FRONT lst)]]
+ lst ""
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_FRONT lst)]]
+ lst "b"
+)
+
+set(lst "a;;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_FRONT lst)]]
+ lst ";b"
+)
+
+set(lst [[a\;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_FRONT lst)]]
+ lst ""
+)
+
+set(lst [[c;a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(POP_FRONT lst)]]
+ lst [[a\;b;c]]
+)
+
+# vcpkg_list(REMOVE_DUPLICATES <list>)
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst ""
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst "a;b"
+)
+
+set(lst "a;a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst "a;b"
+)
+
+set(lst "a;b;a")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst "a;b"
+)
+
+set(lst "c;a;b;a;c")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst "c;a;b"
+)
+
+set(lst "a;;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst "a;;b"
+)
+
+set(lst [[a\;b;a\;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst [[a\;b]]
+)
+
+set(lst [[c;a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_DUPLICATES lst)]]
+ lst [[c;a\;b]]
+)
+
+# vcpkg_list(REVERSE <list>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst ""
+)
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst ";"
+)
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst "b;a"
+)
+set(lst "a;b;c;d;e;f;g")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst "g;f;e;d;c;b;a"
+)
+
+set(lst [[a\;b;a\;b\\;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst [[a\;b\\;c;a\;b]]
+)
+set(lst [[c;a\;b]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REVERSE lst)]]
+ lst [[a\;b;c]]
+)
+
+# vcpkg_list(REMOVE_ITEM <list> <value>)
+set(lst "")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "a")]]
+ lst ""
+)
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "")]]
+ lst ""
+)
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst a)]]
+ lst "b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst b)]]
+ lst "a"
+)
+
+set(lst "a;a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst a)]]
+ lst "b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst b)]]
+ lst "a;a"
+)
+
+set(lst "a;b;c;a;d")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst b)]]
+ lst "a;c;a;d"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst a)]]
+ lst "b;c;d"
+)
+
+set(lst "a;;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "")]]
+ lst "a;b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst a)]]
+ lst ";b"
+)
+
+set(lst [[e;a\;b;c\;d]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "a;b")]]
+ lst [[e;c\;d]]
+)
+
+set(lst [[c;a\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "c")]]
+ lst [[a\;b]]
+)
+
+set(lst [[c;a\\;b;c]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_ITEM lst "a\\;b")]]
+ lst [[c;c]]
+)
+
+# vcpkg_list(REMOVE_AT <list> <index>)
+set(lst "")
+unit_test_ensure_fatal_error([[vcpkg_list(REMOVE_AT lst 0)]])
+
+set(lst ";")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 0)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 1)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst -1)]]
+ lst ""
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst -2)]]
+ lst ""
+)
+unit_test_ensure_fatal_error([[vcpkg_list(REMOVE_AT lst 2)]])
+unit_test_ensure_fatal_error([[vcpkg_list(REMOVE_AT lst -3)]])
+
+set(lst "a;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 0)]]
+ lst "b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 1)]]
+ lst "a"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst -1)]]
+ lst "a"
+)
+
+set(lst "a;;b")
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 0)]]
+ lst ";b"
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 1)]]
+ lst "a;b"
+)
+
+set(lst [[e;a\;b;c\;d]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 0)]]
+ lst [[a\;b;c\;d]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 1)]]
+ lst [[e;c\;d]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst -1)]]
+ lst [[e;a\;b]]
+)
+
+set(lst [[c;a\\;b;c\;d;e]])
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 0)]]
+ lst [[a\\;b;c\;d;e]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 1)]]
+ lst [[c;c\;d;e]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 2)]]
+ lst [[c;a\\;b;e]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst 3)]]
+ lst [[c;a\\;b;c\;d]]
+)
+unit_test_check_variable_equal(
+ [[vcpkg_list(REMOVE_AT lst -1)]]
+ lst [[c;a\\;b;c\;d]]
+)
diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake new file mode 100644 index 0000000..93bfbcf --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-vcpkg_minimum_required.cmake @@ -0,0 +1,49 @@ +# -- error cases -- +# VCPKG_BASE_VERSION not set - vcpkg version is too old +set(VCPKG_BASE_VERSION_backup "${VCPKG_BASE_VERSION}") +unset(VCPKG_BASE_VERSION) +unset(VCPKG_BASE_VERSION CACHE) +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-01-01)]]) +unit_test_ensure_fatal_error([[vcpkg_minimum_required()]]) +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "")]]) +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "2021.01.01")]]) + +set(VCPKG_BASE_VERSION 2021-02-02) + +# VERSION not passed +unit_test_ensure_fatal_error([[vcpkg_minimum_required()]]) +# VERSION weird - empty +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "")]]) +# VERSION weird - dotted +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021.01.01)]]) +# VERSION weird - not a valid year +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 3000-01-01)]]) +# VERSION weird - list +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION "2021-01-01;2021-01-02")]]) +# VERSION weird - small year +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 21-01-01)]]) +# VERSION weird - small month +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-1-01)]]) +# VERSION weird - small day +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-01-1)]]) +# VERSION too-new - later year, earlier month, earlier day +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2022-01-01)]]) +# VERSION too-new - same year, later month, earlier day +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-03-01)]]) +# VERSION too-new - same year, same month, later day +unit_test_ensure_fatal_error([[vcpkg_minimum_required(VERSION 2021-02-03)]]) + +# -- successes -- +# same date +unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-02-02)]]) + +# VERSION old - earlier year, later month, later day +unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2020-03-03)]]) +# VERSION old - same year, earlier month, later day +unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-01-03)]]) +# VERSION old - same year, same month, earlier day +unit_test_ensure_success([[vcpkg_minimum_required(VERSION 2021-02-01)]]) + +# reset to backup +unset(VCPKG_BASE_VERSION) +set(VCPKG_BASE_VERSION "${VCPKG_BASE_VERSION_backup}" CACHE STRING "") diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath.cmake new file mode 100644 index 0000000..5750a05 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath.cmake @@ -0,0 +1,121 @@ +# z_vcpkg_calculate_corrected_rpath(...) + +block(SCOPE_FOR VARIABLES) + +set(CURRENT_PACKAGES_DIR "/P") +set(CURRENT_INSTALLED_DIR "/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/lib") +]] out [[$ORIGIN]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/plugins/group") +]] out [[$ORIGIN:$ORIGIN/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/debug/lib") +]] out [[$ORIGIN]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/debug/plugins/group") +]] out [[$ORIGIN:$ORIGIN/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/tools/port") +]] out [[$ORIGIN:$ORIGIN/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/tools/port/bin") +]] out [[$ORIGIN:$ORIGIN/../../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/tools/port/debug") +]] out [[$ORIGIN:$ORIGIN/../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/tools/port/debug/bin") +]] out [[$ORIGIN:$ORIGIN/../../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/manual-tools/port") +]] out [[$ORIGIN:$ORIGIN/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/manual-tools/port/bin") +]] out [[$ORIGIN:$ORIGIN/../../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/manual-tools/port/debug") +]] out [[$ORIGIN:$ORIGIN/../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "" ELF_FILE_DIR "/P/manual-tools/port/debug/bin") +]] out [[$ORIGIN:$ORIGIN/../../../../debug/lib]]) + +# ORG_RPATH +set(X_VCPKG_RPATH_KEEP_SYSTEM_PATHS 1) +set(CURRENT_PACKAGES_DIR "/cxx/P") +set(CURRENT_INSTALLED_DIR "/cxx/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/opt/lib:/usr/local/lib" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN:/opt/lib:/usr/local/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/I/lib" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/P/lib" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/I/foo/lib/pkgconfig/../../bar" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +set(X_VCPKG_RPATH_KEEP_SYSTEM_PATHS 0) +set(CURRENT_PACKAGES_DIR "/cxx/P") +set(CURRENT_INSTALLED_DIR "/cxx/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/opt/lib:/usr/local/lib" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/I/foo/bar" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/P/foo/bar" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/cxx/I/foo/lib/pkgconfig/../../bar" ELF_FILE_DIR "/cxx/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +# https://github.com/microsoft/vcpkg/issues/37984 +set(CURRENT_PACKAGES_DIR "/c++/P") +set(CURRENT_INSTALLED_DIR "/c++/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/c++/I/foo/bar" ELF_FILE_DIR "/c++/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/c++/P/foo/bar" ELF_FILE_DIR "/c++/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +set(CURRENT_PACKAGES_DIR "/(c)/P") +set(CURRENT_INSTALLED_DIR "/(c)/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/(c)/I/foo/bar" ELF_FILE_DIR "/(c)/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_rpath(OUT_NEW_RPATH_VAR "out" ORG_RPATH "/(c)/P/foo/bar" ELF_FILE_DIR "/(c)/P/lib") +]] out [[$ORIGIN:$ORIGIN/../foo/bar]]) + + +endblock() diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath_macho.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath_macho.cmake new file mode 100644 index 0000000..ee4f42a --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_calculate_corrected_rpath_macho.cmake @@ -0,0 +1,56 @@ +# z_vcpkg_calculate_corrected_macho_rpath_macho(...) + +block(SCOPE_FOR VARIABLES) + +set(CURRENT_PACKAGES_DIR "/P") +set(CURRENT_INSTALLED_DIR "/I") + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/lib") +]] out [[@loader_path]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/plugins/group") +]] out [[@loader_path/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/debug/lib") +]] out [[@loader_path]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/debug/plugins/group") +]] out [[@loader_path/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/tools/port") +]] out [[@loader_path/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/tools/port/bin") +]] out [[@loader_path/../../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/tools/port/debug") +]] out [[@loader_path/../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/tools/port/debug/bin") +]] out [[@loader_path/../../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/manual-tools/port") +]] out [[@loader_path/../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/manual-tools/port/bin") +]] out [[@loader_path/../../../lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/manual-tools/port/debug") +]] out [[@loader_path/../../../debug/lib]]) + +unit_test_check_variable_equal([[ + z_vcpkg_calculate_corrected_macho_rpath(OUT_NEW_RPATH_VAR "out" MACHO_FILE_DIR "/P/manual-tools/port/debug/bin") +]] out [[@loader_path/../../../../debug/lib]]) + +endblock() diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_cmake_config_fixup_merge.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_cmake_config_fixup_merge.cmake new file mode 100644 index 0000000..8809af4 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_cmake_config_fixup_merge.cmake @@ -0,0 +1,56 @@ +# z_vcpkg_cmake_config_fixup_merge(<out_list> <release_list> <debug_list>) +set(release_libs namespace::C++_shared) +set(debug_libs namespace::C++_shared) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged "namespace::C++_shared" +) + +set(release_libs A) +set(debug_libs B) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[\$<\$<NOT:\$<CONFIG:DEBUG>>:A>;\$<\$<CONFIG:DEBUG>:B>]] +) + +set(release_libs A B) +set(debug_libs A ) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[A;\$<\$<NOT:\$<CONFIG:DEBUG>>:B>]] +) + +set(release_libs A ) +set(debug_libs A B) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[A;\$<\$<CONFIG:DEBUG>:B>]] +) + +set(release_libs A C) +set(debug_libs C) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[\$<\$<NOT:\$<CONFIG:DEBUG>>:A>;\$<\$<CONFIG:DEBUG>:C>;\$<\$<NOT:\$<CONFIG:DEBUG>>:C>]] +) + +set(release_libs [[\$<\$<NOT:\$<CONFIG:DEBUG>>:A>;\$<\$<CONFIG:DEBUG>:B>]]) +set(debug_libs [[\$<\$<NOT:\$<CONFIG:DEBUG>>:A>;\$<\$<CONFIG:DEBUG>:B>]]) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[\$<\$<NOT:\$<CONFIG:DEBUG>>:A>;\$<\$<CONFIG:DEBUG>:B>]] +) + +set(release_libs optimized o1 debug d1) +set(debug_libs optimized o2 debug d2) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[\$<\$<NOT:\$<CONFIG:DEBUG>>:o1>;\$<\$<CONFIG:DEBUG>:d2>]] +) + +set(release_libs debug d1 optimized o1) +set(debug_libs debug d2 optimized o2) +unit_test_check_variable_equal( + [[z_vcpkg_cmake_config_fixup_merge(merged release_libs debug_libs)]] + merged [[\$<\$<CONFIG:DEBUG>:d2>;\$<\$<NOT:\$<CONFIG:DEBUG>>:o1>]] +) diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_function_arguments.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_function_arguments.cmake new file mode 100644 index 0000000..e88eb68 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_function_arguments.cmake @@ -0,0 +1,63 @@ +# these both set `args` in the top level
+function(check_function_args start)
+ z_vcpkg_function_arguments(out "${start}")
+ set(args "${out}" PARENT_SCOPE)
+endfunction()
+function(check_all_function_args)
+ z_vcpkg_function_arguments(out)
+ set(args "${out}" PARENT_SCOPE)
+endfunction()
+
+unit_test_ensure_fatal_error([[check_function_args(-1)]])
+unit_test_ensure_fatal_error([[check_function_args(3)]])
+unit_test_ensure_fatal_error([[check_function_args(notanumber)]])
+unit_test_check_variable_equal(
+ [[check_all_function_args()]]
+ args ""
+)
+unit_test_check_variable_equal(
+ [[check_all_function_args("")]]
+ args ""
+)
+unit_test_check_variable_equal(
+ [[check_all_function_args("" "")]]
+ args ";"
+)
+unit_test_check_variable_equal(
+ [[check_all_function_args("" "" "" "")]]
+ args ";;;"
+)
+
+unit_test_check_variable_equal(
+ [[check_all_function_args(a b c)]]
+ args "a;b;c"
+)
+unit_test_check_variable_equal(
+ [[check_function_args(2 a b c)]]
+ args "b;c"
+)
+unit_test_check_variable_equal(
+ [[check_function_args(3 a b c)]]
+ args "c"
+)
+
+unit_test_check_variable_equal(
+ [=[check_all_function_args("a;b" [[c\;d]] e)]=]
+ args [[a\;b;c\\;d;e]]
+)
+unit_test_check_variable_equal(
+ [=[check_all_function_args("a;b" [[c\;d]] [[e\\;f]])]=]
+ args [[a\;b;c\\;d;e\\\;f]]
+)
+unit_test_check_variable_equal(
+ [=[check_function_args(2 "a;b" [[c\;d]] e)]=]
+ args [[c\\;d;e]]
+)
+unit_test_check_variable_equal(
+ [=[check_function_args(3 "a;b" [[c\;d]] e)]=]
+ args "e"
+)
+unit_test_check_variable_equal(
+ [=[check_function_args(4 "a;b" [[c\;d]] e)]=]
+ args ""
+)
diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_setup_pkgconfig_path.cmake b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_setup_pkgconfig_path.cmake new file mode 100644 index 0000000..a0b5da7 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/test-z_vcpkg_setup_pkgconfig_path.cmake @@ -0,0 +1,47 @@ +# z_vcpkg_setup_pkgconfig_path(BASE_DIR <list>) +# z_vcpkg_restore_pkgconfig_path() + +# These functions use vcpkg_backup/restore_env_variables which use scoped variables +# and cannot be called in unit_test_check_*. + +set(ENV{PKG_CONFIG} "/a/pkgconf") +set(ENV{PKG_CONFIG_PATH} "1") +set(saved_path "$ENV{PATH}") + +block(SCOPE_FOR VARIABLES) + +set(CURRENT_PACKAGES_DIR "P") +set(CURRENT_INSTALLED_DIR "I") + +z_vcpkg_setup_pkgconfig_path(CONFIG RELEASE) +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]]) +unit_test_check_variable_not_equal( + [[ string(REGEX MATCH "^P.lib.pkgconfig.P.share.pkgconfig.I.lib.pkgconfig.I.share.pkgconfig.1\$" output "$ENV{PKG_CONFIG_PATH}") ]] + output "" +) + +z_vcpkg_restore_pkgconfig_path() +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]]) +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG_PATH} "1") + +z_vcpkg_setup_pkgconfig_path(CONFIG DEBUG) +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]]) +unit_test_check_variable_not_equal([[]] ENV{PKG_CONFIG_PATH} "1") +unit_test_check_variable_not_equal( + [[ string(REGEX MATCH "^P.debug.lib.pkgconfig.P.share.pkgconfig.I.debug.lib.pkgconfig.I.share.pkgconfig.1\$" output "$ENV{PKG_CONFIG_PATH}") ]] + output "" +) + +z_vcpkg_restore_pkgconfig_path() +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG} [[/a/pkgconf]]) +unit_test_check_variable_equal([[]] ENV{PKG_CONFIG_PATH} "1") + +# z_vcpkg_setup_pkgconfig_path changes PATH but it is not restored. +# It is hard to see which side effects a restore would have, so +# this is expected behaviour for now. +unit_test_check_variable_not_equal([[]] ENV{PATH} "${saved_path}") + +unit_test_ensure_fatal_error([[ z_vcpkg_setup_pkgconfig_path() ]]) +unit_test_ensure_fatal_error([[ z_vcpkg_setup_pkgconfig_path(CONFIG unknown) ]]) + +endblock() diff --git a/vcpkg/scripts/test_ports/unit-test-cmake/vcpkg.json b/vcpkg/scripts/test_ports/unit-test-cmake/vcpkg.json new file mode 100644 index 0000000..e981be1 --- /dev/null +++ b/vcpkg/scripts/test_ports/unit-test-cmake/vcpkg.json @@ -0,0 +1,61 @@ +{ + "name": "unit-test-cmake", + "version-string": "ci", + "description": "Ensures that the CMake scripts are unit tested.", + "license": "MIT", + "supports": "x64", + "default-features": [ + "backup-restore-env-vars", + "execute-required-process", + "fixup-pkgconfig", + { + "name": "fixup-rpath", + "platform": "!windows" + }, + "function-arguments", + "host-path-list", + "list", + "merge-libs", + "minimum-required", + "setup-pkgconfig-path" + ], + "features": { + "backup-restore-env-vars": { + "description": "Test the vcpkg_backup/restore_env_vars functions" + }, + "execute-required-process": { + "description": "Test the vcpkg_execute_required_process function" + }, + "fixup-pkgconfig": { + "description": "Test the vcpkg_fixup_pkgconfig function" + }, + "fixup-rpath": { + "description": "Test the rpath fixup function", + "supports": "!windows" + }, + "function-arguments": { + "description": "Test the z_vcpkg_function_arguments function" + }, + "host-path-list": { + "description": "Test the vcpkg_host_path_list function" + }, + "list": { + "description": "Test the vcpkg_list function" + }, + "merge-libs": { + "description": "Test the z_vcpkg_cmake_config_fixup_merge_lists function", + "dependencies": [ + { + "name": "vcpkg-cmake-config", + "host": true + } + ] + }, + "minimum-required": { + "description": "Test the vcpkg_minimum_required function" + }, + "setup-pkgconfig-path": { + "description": "Test the z_vcpkg_setup/restore_pkgconfig_path functions" + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/portfile.cmake new file mode 100644 index 0000000..7095dc6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/portfile.cmake @@ -0,0 +1,3 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_acquire_msys(MSYS_ROOT Z_ALL_PACKAGES)
diff --git a/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/vcpkg.json new file mode 100644 index 0000000..808294b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-acquire-msys-test/vcpkg.json @@ -0,0 +1,7 @@ +{ + "name": "vcpkg-acquire-msys-test", + "version-string": "0", + "port-version": 1, + "description": "Test port to exercise vcpkg_acquire_msys", + "supports": "x86 & windows" +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/portfile.cmake new file mode 100644 index 0000000..7d4d2ec --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/portfile.cmake @@ -0,0 +1,3 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/CMakeLists.txt new file mode 100644 index 0000000..682d897 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.29) +project(angelscript-test CXX) +set(CMAKE_CXX_STANDARD 11) +add_executable(main main.cpp) +find_package(Angelscript CONFIG REQUIRED) +target_link_libraries(main PRIVATE Angelscript::angelscript) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/main.cpp new file mode 100644 index 0000000..b808911 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/project/main.cpp @@ -0,0 +1,6 @@ +#include <angelscript.h> +int main() +{ + auto LibraryVersion = asGetLibraryVersion(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/vcpkg.json new file mode 100644 index 0000000..4369acb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-angelscript/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-angelscript", + "version-string": "ci", + "description": "Validates angelscript", + "dependencies": [ + "angelscript", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/CMakeLists.txt new file mode 100644 index 0000000..8bbcf70 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/CMakeLists.txt @@ -0,0 +1,45 @@ +cmake_minimum_required(VERSION 3.12) + +project(embedresource-test VERSION 0.0.1) + +set(CMAKE_CXX_STANDARD 17) + +find_package(EmbedResource REQUIRED) + +file(SIZE "${CMAKE_CURRENT_LIST_DIR}/main.cpp" MAIN_CPP_FILE_SIZE) +file(SIZE "${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt" CMAKELISTS_TXT_FILE_SIZE) + +add_resource_library(sample_test_resources OBJECT RESOURCE_COLLECTION_NAME testdata1 RESOURCES main.cpp GENERATOR_COMMAND echo "CMakeLists.txt" GENERATOR_DEPEND CMakeLists.txt) +add_resource_library(testdata3 OBJECT RESOURCES main.cpp) + +macro(setup_target target) + target_add_resource(${target} RESOURCE_COLLECTION_NAME testdata2 RESOURCES main.cpp) + get_target_property(type ${target} TYPE) + if ("${type}" STREQUAL "STATIC_LIBRARY") + target_link_libraries(${target} PRIVATE $<BUILD_INTERFACE:sample_test_resources> $<BUILD_INTERFACE:testdata3>) + else() + target_link_libraries(${target} PRIVATE sample_test_resources testdata3) + endif() + + target_compile_definitions(${target} PRIVATE MAIN_CPP_FILE_SIZE=${MAIN_CPP_FILE_SIZE}) + target_compile_definitions(${target} PRIVATE CMAKELISTS_TXT_FILE_SIZE=${CMAKELISTS_TXT_FILE_SIZE}) +endmacro() + +add_executable(sample_test_exe main.cpp) +setup_target(sample_test_exe) + +add_library(sample_test_shlib SHARED main.cpp) +target_compile_features(sample_test_shlib PRIVATE cxx_std_20) +setup_target(sample_test_shlib) + +add_library(sample_test_lib STATIC main.cpp) +setup_target(sample_test_lib) + +install(TARGETS sample_test_shlib EXPORT sample_test_shlib) +install(EXPORT sample_test_shlib FILE sampleTargets.cmake DESTINATION cmake) + +install(TARGETS sample_test_lib EXPORT sample_test_lib) +install(EXPORT sample_test_lib FILE sampleTargets.cmake DESTINATION cmake) + +enable_testing() +add_test(NAME sample_test_exe COMMAND sample_test_exe) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/main.cpp new file mode 100644 index 0000000..39d7a83 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/project/main.cpp @@ -0,0 +1,58 @@ +#include <EmbeddedResource.h> +#include <exception> +#include <iostream> +#include <stdexcept> +#include <string_view> + +DECLARE_RESOURCE_COLLECTION(testdata1); +DECLARE_RESOURCE_COLLECTION(testdata2); +DECLARE_RESOURCE_COLLECTION(testdata3); +DECLARE_RESOURCE(testdata3, main_cpp); + +void verify_resource(ResourceLoader const& r) +{ + if (r.name() == L"main.cpp") + { +#ifdef __cpp_lib_span + if (r.template data<uint8_t>().size() != MAIN_CPP_FILE_SIZE) { throw std::runtime_error("r.data.len() != MAIN_CPP_FILE_SIZE"); } +#endif +#ifdef __cpp_lib_string_view + if (r.string().size() != MAIN_CPP_FILE_SIZE) { throw std::runtime_error("r.string().size() != MAIN_CPP_FILE_SIZE"); } +#endif + } + else if (r.name() == L"CMakeLists.txt") + { +#ifdef __cpp_lib_span + if (r.template data<uint8_t>().size() != CMAKELISTS_TXT_FILE_SIZE) + { + throw std::runtime_error("r.data.len() != CMAKELISTS_TXT_FILE_SIZE"); + } +#endif +#ifdef __cpp_lib_string_view + if (r.string().size() != CMAKELISTS_TXT_FILE_SIZE) { throw std::runtime_error("r.string().size() != CMAKELISTS_TXT_FILE_SIZE"); } +#endif + } + else { throw std::runtime_error("Unknown resource name"); } +} + +int main(int argc, char* argv[]) +try +{ + std::string_view res = LOAD_RESOURCE(testdata3, main_cpp).data; + if (res.size() != MAIN_CPP_FILE_SIZE) { throw std::runtime_error("r.data.len() != MAIN_CPP_FILE_SIZE"); } + + auto resourceCollection1 = LOAD_RESOURCE_COLLECTION(testdata1); + for (auto const r : resourceCollection1) { verify_resource(r); } + + auto resourceCollection2 = LOAD_RESOURCE_COLLECTION(testdata2); + for (auto const r : resourceCollection2) { verify_resource(r); } + + auto resourceCollection3 = LOAD_RESOURCE_COLLECTION(testdata3); + for (auto const r : resourceCollection2) { verify_resource(r); } + + return 0; +} catch (const std::exception& ex) +{ + std::cerr << "Failed: " << ex.what() << std::endl; + return -1; +}
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/vcpkg.json new file mode 100644 index 0000000..a8267bb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ankurvdev-embedresource/vcpkg.json @@ -0,0 +1,13 @@ +{ + "name": "vcpkg-ci-ankurvdev-embedresource", + "version-string": "ci", + "description": "Validates ankurvdev-embedresource", + "license": "BSD-3-Clause", + "dependencies": [ + "ankurvdev-embedresource", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-arrow/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-arrow/portfile.cmake new file mode 100644 index 0000000..46a1794 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-arrow/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" ARROW_LINK_SHARED) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_INSTALLED_DIR}/share/arrow/example" + OPTIONS + -DARROW_LINK_SHARED=${ARROW_LINK_SHARED} +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-arrow/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-arrow/vcpkg.json new file mode 100644 index 0000000..8bf9a80 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-arrow/vcpkg.json @@ -0,0 +1,20 @@ +{ + "name": "vcpkg-ci-arrow", + "version-date": "2022-07-25", + "description": "Builds an example app in order to validate the arrow port.", + "license": "Apache-2.0", + "dependencies": [ + { + "name": "arrow", + "default-features": false, + "features": [ + "csv", + "example" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/portfile.cmake new file mode 100644 index 0000000..4c14b70 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/portfile.cmake @@ -0,0 +1,7 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_find_acquire_program(PKGCONFIG)
+
+vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project")
+
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/CMakeLists.txt new file mode 100644 index 0000000..6e3b933 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.29)
+
+project(vcpkg-ci-aurora-au LANGUAGES CXX)
+
+find_package(Au CONFIG REQUIRED)
+
+add_executable(test_au_client test_au_client.cc)
+target_link_libraries(test_au_client PRIVATE Au::au)
+target_compile_features(test_au_client PRIVATE cxx_std_14)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/test_au_client.cc b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/test_au_client.cc new file mode 100644 index 0000000..1b5e0fe --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/project/test_au_client.cc @@ -0,0 +1,18 @@ +#include <iostream>
+
+#include "au/au.hh"
+#include "au/io.hh"
+#include "au/units/hours.hh"
+#include "au/units/meters.hh"
+#include "au/units/miles.hh"
+
+using ::au::symbols::h;
+using ::au::symbols::mi;
+constexpr auto km = ::au::kilo(::au::symbols::m);
+
+int main(int argc, char **argv) {
+ constexpr auto v = 65.0 * mi / h;
+ std::cout << v << ", in km/h, rounded to nearest integer, is "
+ << round_as(km / h, v) << std::endl;
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/vcpkg.json new file mode 100644 index 0000000..35f87eb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-aurora-au/vcpkg.json @@ -0,0 +1,13 @@ +{
+ "name": "vcpkg-ci-aurora-au",
+ "version-string": "ci",
+ "description": "Testing packages which provide AURORA-AU",
+ "license": null,
+ "dependencies": [
+ "aurora-au",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ]
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/CMakeLists.txt new file mode 100644 index 0000000..ef8945f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.10) +project(bgfx-test CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + +find_package(bgfx CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE + bgfx::bgfx + # auxiliary targets + bgfx::bx + bgfx::bimg + bgfx::bimg_decode + bgfx::bimg_encode +) +if(ANDROID) + find_package(OpenGL COMPONENTS EGL GLES2 REQUIRED) + target_link_libraries(main PRIVATE nativewindow OpenGL::EGL OpenGL::GLES2) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/main.cpp new file mode 100644 index 0000000..94720d6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/project/main.cpp @@ -0,0 +1,9 @@ +#include <bgfx/bgfx.h> +#include <bgfx/platform.h> + +int main() +{ + bgfx::renderFrame(); + bgfx::Init init; + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/vcpkg.json new file mode 100644 index 0000000..b78e39c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bgfx/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-bgfx", + "version-string": "ci", + "description": "Port to force features of bgfx within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "bgfx", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-blas/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-blas/portfile.cmake new file mode 100644 index 0000000..165195b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-blas/portfile.cmake @@ -0,0 +1,10 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/CMakeLists.txt new file mode 100644 index 0000000..6f94f89 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.18) # for BLAS::BLAS + +project(vcpkg-ci-blas C) + +find_package(BLAS REQUIRED) + +add_executable(fortran-interface main.c) +target_link_libraries(fortran-interface PRIVATE BLAS::BLAS) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(BLAS_PC REQUIRED IMPORTED_TARGET blas) + +add_executable(fortran-interface-pc main.c) +target_link_libraries(fortran-interface-pc PRIVATE PkgConfig::BLAS_PC) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/main.c new file mode 100644 index 0000000..cde97be --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-blas/project/main.c @@ -0,0 +1,17 @@ +extern void dgemm_(char*, char*, int*, int*,int*, double*, double*, int*, double*, int*, double*, double*, int*); + +int main() +{ + char ta = 'N'; + char tb = 'N'; + int m = 2; + int n = 2; + int k = 1; + double alpha = 0.5; + double A[2] = {1.0, 2.0}; // m x k + double B[2] = {3.0, 4.0}; // k x n + double beta = 0.05; + double C[4] = {100.0, 200.0, 300.0, 400.0}; // 2 x 2 + dgemm_(&ta, &tb, &m, &n, &k, &alpha, A, &m, B, &k, &beta, C, &m); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-blas/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-blas/vcpkg.json new file mode 100644 index 0000000..d83a9f7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-blas/vcpkg.json @@ -0,0 +1,13 @@ +{ + "name": "vcpkg-ci-blas", + "version-string": "ci", + "description": "Testing packages which provide BLAS", + "license": null, + "dependencies": [ + "blas", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-boost/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-boost/portfile.cmake new file mode 100644 index 0000000..0015715 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-boost/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-boost/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-boost/vcpkg.json new file mode 100644 index 0000000..7f5fc6c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-boost/vcpkg.json @@ -0,0 +1,67 @@ +{ + "name": "vcpkg-ci-boost", + "version": "1", + "description": "Boost features testing within CI.", + "dependencies": [ + "boost", + { + "name": "boost", + "default-features": false, + "features": [ + "mpi" + ], + "platform": "!staticcrt & !android & !(arm & windows) & !uwp" + }, + { + "name": "boost-asio", + "default-features": false, + "features": [ + "ssl" + ] + }, + { + "name": "boost-fiber", + "default-features": false, + "features": [ + "numa" + ], + "platform": "!uwp & !arm & !emscripten" + }, + { + "name": "boost-locale", + "default-features": false, + "features": [ + "icu" + ], + "platform": "!uwp" + }, + { + "name": "boost-mpi", + "default-features": false, + "features": [ + "python3" + ], + "platform": "!staticcrt & !static & !android & !(arm & windows) & !uwp" + }, + { + "name": "boost-odeint", + "default-features": false, + "features": [ + "mpi" + ], + "platform": "!staticcrt & !android & !(windows & arm) & !uwp" + }, + { + "name": "boost-python", + "default-features": false, + "platform": "!emscripten & !ios & !android & !uwp" + }, + { + "name": "boost-regex", + "default-features": false, + "features": [ + "icu" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-box2d/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/CMakeLists.txt new file mode 100644 index 0000000..e8cd743 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.30) +project(box2d-test C) + +find_package(box2d CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE box2d::box2d) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/main.c new file mode 100644 index 0000000..94c359b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/project/main.c @@ -0,0 +1,11 @@ +#include <stdio.h> +#include <box2d/box2d.h> + +int main() +{ + b2Version version = b2GetVersion(); + printf("b2 version: %d.%d.%d\n", version.major, version.minor, version.revision); + + b2WorldDef worldDef = b2DefaultWorldDef(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-box2d/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/vcpkg.json new file mode 100644 index 0000000..aabe80f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-box2d/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-box2d", + "version-string": "ci", + "description": "Port to validate box2d", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "box2d", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/portfile.cmake new file mode 100644 index 0000000..77b7277 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/portfile.cmake @@ -0,0 +1,19 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO bulletphysics/bullet3 + REF 3.25 + SHA512 7086e5fcf69635801bb311261173cb8d173b712ca1bd78be03df48fad884674e85512861190e45a1a62d5627aaad65cde08c175c44a3be9afa410d3dfd5358d4 + HEAD_REF master +) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DSOURCE_PATH=${SOURCE_PATH}" + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/project/CMakeLists.txt new file mode 100644 index 0000000..3e89f35 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/project/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.10) +project(bullet3-test CXX) + +set(CMAKE_CXX_STANDARD 11) + +block() + find_package(Bullet CONFIG REQUIRED) + + add_executable(main "${SOURCE_PATH}/examples/HelloWorld/HelloWorld.cpp") + target_link_libraries(main PRIVATE ${BULLET_LIBRARIES}) +endblock() + +if(WIN32) + set(unused "${PKG_CONFIG_EXECUTABLE}") + return() +endif() + +block() + find_package(PkgConfig REQUIRED) + pkg_check_modules(bullet bullet REQUIRED IMPORTED_TARGET) + + add_executable(main-pkgconfig "${SOURCE_PATH}/examples/HelloWorld/HelloWorld.cpp") + target_link_libraries(main-pkgconfig PRIVATE PkgConfig::bullet) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/vcpkg.json new file mode 100644 index 0000000..ecf08fa --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-bullet3/vcpkg.json @@ -0,0 +1,45 @@ +{ + "name": "vcpkg-ci-bullet3", + "version-string": "ci", + "description": "Port to force features of bullet3 within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + "bullet3", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "extras", + { + "name": "opencl", + "platform": "!uwp" + } + ], + "features": { + "extras": { + "description": "bullet3[extras]", + "dependencies": [ + { + "name": "bullet3", + "features": [ + "extras" + ] + } + ] + }, + "opencl": { + "description": "bullet3[opencl]", + "dependencies": [ + { + "name": "bullet3", + "features": [ + "opencl" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-capstone/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/CMakeLists.txt new file mode 100644 index 0000000..d70bdbd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.29) +project(capstone-test CXX) + +set(CMAKE_CXX_STANDARD 11) + +add_executable(main main.cpp) + +find_package(capstone CONFIG REQUIRED) +target_link_libraries(main PRIVATE capstone::capstone) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/main.cpp new file mode 100644 index 0000000..5ba9bce --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/project/main.cpp @@ -0,0 +1,8 @@ +#include <capstone/capstone.h> + +int main() +{ + csh handle; + cs_insn* insn = cs_malloc(handle); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-capstone/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/vcpkg.json new file mode 100644 index 0000000..b66ac26 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-capstone/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-capstone", + "version-string": "ci", + "description": "Validates capstone", + "dependencies": [ + "capstone", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/portfile.cmake new file mode 100644 index 0000000..7f70d16 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/portfile.cmake @@ -0,0 +1,164 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# For simplicity and speed, reusing source and build dirs +# - and the CMake cache - in multiple steps. +set(SOURCE_PATH "${CURRENT_BUILDTREES_DIR}/src/project") +file(REMOVE_RECURSE "${SOURCE_PATH}") + + +message(STATUS "Testing toolchain find_library search path setup") + +file(COPY "${CURRENT_PORT_DIR}/project/" DESTINATION "${SOURCE_PATH}") +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}" + DISABLE_PARALLEL_CONFIGURE # keep separate logs +) +vcpkg_cmake_build() + + +message(STATUS "Testing toolchain capability VCPKG_LOCK_FIND_PACKAGE") + +set(VCPKG_BUILD_TYPE release) + +function(write_test_project TEST_CODE) + configure_file("${CURRENT_PORT_DIR}/project/vcpkg_lock_find_package/CMakeLists.txt.in" "${SOURCE_PATH}/CMakeLists.txt" @ONLY) +endfunction() + +include("${CURRENT_HOST_INSTALLED_DIR}/share/unit-test-cmake/test-macros.cmake") + +function(send_error summary) + set_has_error() + string(SHA1 id "${summary}") + string(SUBSTRING "${id}" 0 6 id) + set(log_base "${CURRENT_BUILDTREES_DIR}/test-${TARGET_TRIPLET}-${id}") + set(log_files "") + file(COPY_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-out.log" "${log_base}-out.log") + file(COPY_FILE "${CURRENT_BUILDTREES_DIR}/build-${TARGET_TRIPLET}-rel-err.log" "${log_base}-err.log") + message(SEND_ERROR " Test failed:\n${summary}\n See logs for more information:\n ${log_base}-out.log\n ${log_base}-err.log\n") +endfunction() + +macro(unit_test_ensure_cmake_success utecs_test) + write_test_project("${utecs_test}") + cmake_language(EVAL CODE "vcpkg_cmake_build()") + if(Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + send_error("${utecs_test} was expected to be successful.") + endif() + unset_fatal_error() +endmacro() + +macro(unit_test_ensure_cmake_error utece_test) + write_test_project("${utece_test}") + cmake_language(EVAL CODE "vcpkg_cmake_build()") + if(NOT Z_VCPKG_UNIT_TEST_HAS_FATAL_ERROR) + send_error("${utece_test} was expected to be successful.") + endif() + unset_fatal_error() +endmacro() + + +unit_test_ensure_cmake_error([[ + # No VCPKG_LOCK_FIND_PACKAGE + find_package(absentPackageX REQUIRED) +]]) +unit_test_ensure_cmake_success([[ + # No VCPKG_LOCK_FIND_PACKAGE + find_package(directPackageX REQUIRED) + find_package(transitivePackageX REQUIRED) + find_package(transitiveOptionalAbsentPackageX REQUIRED) + find_package(absentPackageX) + if(absentPackageX_FOUND) + message(FATAL_ERROR "absentPackageX_FOUND unexpectedly set to '${absentPackageX_FOUND}'.") + endif() +]]) + + +unit_test_ensure_cmake_success([[ + # Disabling an absent optional package + set(VCPKG_LOCK_FIND_PACKAGE_absentPackageX 0) + find_package(absentPackageX) +]]) + +unit_test_ensure_cmake_error([[ + # Disabling an absent required package + set(VCPKG_LOCK_FIND_PACKAGE_absentPackageX 0) + find_package(absentPackageX REQUIRED) +]]) + +unit_test_ensure_cmake_success([[ + # Disabling an available optional package + set(VCPKG_LOCK_FIND_PACKAGE_directPackageX 0) + find_package(directPackageX) + if(directPackageX_FOUND) + message(FATAL_ERROR "directPackageX_FOUND unexpectedly set to '${directPackageX_FOUND}'.") + endif() +]]) + +unit_test_ensure_cmake_error([[ + # Disabling an available required package + set(VCPKG_LOCK_FIND_PACKAGE_directPackageX 0) + find_package(directPackageX REQUIRED) +]]) + +unit_test_ensure_cmake_success([[ + # Core capability: a smart CMAKE_DISABLE_FIND_PACKAGE_<Pkg> + # Disabling only the direct package + set(VCPKG_LOCK_FIND_PACKAGE_directPackageX 0) + find_package(directPackageX) # optional + find_package(transitivePackageX REQUIRED) +]]) + +unit_test_ensure_cmake_error([[ + # For reference: CMake default behavior which we want to avoid + set(CMAKE_DISABLE_FIND_PACKAGE_directPackageX 1) + find_package(transitivePackageX REQUIRED) +]]) + + +unit_test_ensure_cmake_error([[ + # Requiring an absent optional package + set(VCPKG_LOCK_FIND_PACKAGE_absentPackageX 1) + find_package(absentPackageX) +]]) + +unit_test_ensure_cmake_error([[ + # Requiring an absent required package + set(VCPKG_LOCK_FIND_PACKAGE_absentPackageX 1) + find_package(absentPackageX REQUIRED) +]]) + +unit_test_ensure_cmake_success([[ + # Requiring an available optional package + set(VCPKG_LOCK_FIND_PACKAGE_directPackageX 1) + find_package(directPackageX) + if(NOT DEFINED directPackageX_FOUND) + message(FATAL_ERROR "directPackageX_FOUND unexpectedly undefined.") + elseif(NOT directPackageX_FOUND) + message(FATAL_ERROR "directPackageX_FOUND unexpectedly set to '${directPackageX_FOUND}'.") + endif() +]]) + +unit_test_ensure_cmake_success([[ + # Requiring an available required package + set(VCPKG_LOCK_FIND_PACKAGE_directPackageX 1) + find_package(directPackageX REQUIRED) + if(NOT DEFINED directPackageX_FOUND) + message(FATAL_ERROR "directPackageX_FOUND unexpectedly undefined.") + elseif(NOT directPackageX_FOUND) + message(FATAL_ERROR "directPackageX_FOUND unexpectedly set to '${directPackageX_FOUND}'.") + endif() +]]) + +unit_test_ensure_cmake_success([[ + # Core capability: a smart CMAKE_REQUIRE_FIND_PACKAGE_<Pkg> + # Requiring only the direct package + set(VCPKG_LOCK_FIND_PACKAGE_absentPackageX 1) + find_package(transitiveOptionalAbsentPackageX REQUIRED) +]]) + +unit_test_ensure_cmake_error([[ + # For reference: CMake default behavior which we want to avoid + set(CMAKE_REQUIRE_FIND_PACKAGE_absentPackageX 1) + find_package(transitiveOptionalAbsentPackageX REQUIRED) +]]) + +unit_test_report_result() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/CMakeLists.txt new file mode 100644 index 0000000..2171283 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/CMakeLists.txt @@ -0,0 +1,42 @@ +cmake_minimum_required(VERSION 3.30) +project(cmake-toolchain-file-test C CXX) + +foreach(var IN ITEMS + CMAKE_SYSROOT + CMAKE_FIND_ROOT_PATH + CMAKE_PREFIX_PATH + CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES + CMAKE_SYSTEM_IGNORE_PATH + CMAKE_FIND_ROOT_PATH_MODE_LIBRARY +) + list(JOIN "${var}" "\n " dirs) + message("" "${var}:\n ${dirs}\n") +endforeach() + +set(CMAKE_FIND_DEBUG_MODE 1) +set(link_libs "") +set(implicit_link_libs "${CMAKE_CXX_IMPLICIT_LINK_LIBRARIES}") +list(REMOVE_ITEM implicit_link_libs ${CMAKE_C_IMPLICIT_LINK_LIBRARIES}) +foreach(lib IN LISTS implicit_link_libs) + if(EXISTS "${lib}") + message("" "Absolute path: ${lib}\n") + else() + string(MAKE_C_IDENTIFIER "${lib}" id) + find_library(${id}_LIBRARY NAMES "${lib}" NO_CACHE) + if(NOT ${id}_LIBRARY) + find_library(${id}_LIBRARY NAMES "${lib}" PATHS ${CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES} NO_DEFAULT_PATH NO_CACHE) + endif() + list(APPEND link_libs "${${id}_LIBRARY}") + endif() +endforeach() + +# Pull link errors into config step set of log files +try_compile(link_libs_accepted + SOURCES "${CMAKE_CURRENT_LIST_DIR}/main.c" + LINK_LIBRARIES ${link_libs} + LOG_DESCRIPTION "Checking linking with ${link_libs}" + OUTPUT_VARIABLE output +) +if(NOT link_libs_accepted) + message(FATAL_ERROR "${output}") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/main.c new file mode 100644 index 0000000..d0510dd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/main.c @@ -0,0 +1,7 @@ +#include <stdio.h> + +int main() +{ + printf("Hello %s\n", "world"); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/CMakeLists.txt.in b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/CMakeLists.txt.in new file mode 100644 index 0000000..c80e1da --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/CMakeLists.txt.in @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.30) +project(cmake-toolchain-file-test C) + +set(CMAKE_FIND_DEBUG_MODE 1) +set(VCPKG_TRACE_FIND_PACKAGE 1) + +set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE NEVER) +set(CMAKE_PREFIX_PATH "${CMAKE_CURRENT_LIST_DIR}/vcpkg_lock_find_package") + +@TEST_CODE@ diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/directPackageXConfig.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/directPackageXConfig.cmake new file mode 100644 index 0000000..636bc1a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/directPackageXConfig.cmake @@ -0,0 +1 @@ +# intentionally empty diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitiveOptionalAbsentPackageXConfig.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitiveOptionalAbsentPackageXConfig.cmake new file mode 100644 index 0000000..c55e262 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitiveOptionalAbsentPackageXConfig.cmake @@ -0,0 +1,2 @@ +# Optional dependency! +find_package(absentPackageX) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitivePackageXConfig.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitivePackageXConfig.cmake new file mode 100644 index 0000000..2a47fac --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/project/vcpkg_lock_find_package/transitivePackageXConfig.cmake @@ -0,0 +1,2 @@ +include(CMakeFindDependencyMacro) +find_dependency(directPackageX) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/vcpkg.json new file mode 100644 index 0000000..d754f71 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-cmake-toolchain-file/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-cmake-toolchain-file", + "version-string": "ci", + "description": "Validate vcpkg.cmake toolchain file", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "unit-test-cmake", + "host": true + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/CMakeLists.txt new file mode 100644 index 0000000..b24d994 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.29) +project(crashpad-test CXX) + +set(CMAKE_CXX_STANDARD 11) + +add_executable(main main.cpp) + +find_package(crashpad CONFIG REQUIRED) +target_link_libraries(main PRIVATE crashpad::crashpad) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/main.cpp new file mode 100644 index 0000000..f450f9e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/project/main.cpp @@ -0,0 +1,7 @@ +#include "client/crashpad_client.h" + +int main() +{ + auto *client = new crashpad::CrashpadClient(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/vcpkg.json new file mode 100644 index 0000000..1903999 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-crashpad/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-crashpad", + "version-string": "ci", + "description": "Validates crashpad", + "dependencies": [ + "crashpad", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-curl/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-curl/portfile.cmake new file mode 100644 index 0000000..d66f1b3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-curl/portfile.cmake @@ -0,0 +1,14 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" + OPTIONS_RELEASE + "-DCURL_CONFIG=${CURRENT_INSTALLED_DIR}/tools/curl/bin/curl-config" + OPTIONS_DEBUG + "-DCURL_CONFIG=${CURRENT_INSTALLED_DIR}/tools/curl/debug/bin/curl-config" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/CMakeLists.txt new file mode 100644 index 0000000..ae54cc3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.30) +project(libcurl-test C) + +block(SCOPE_FOR VARIABLES) + # blocked by FindOpenSSL in CMake 3.30: set(CMAKE_DISABLE_FIND_PACKAGE_PkgConfig 1) + + find_package(CURL COMPONENTS libz REQUIRED) + + add_executable(main main.c) + target_link_libraries(main PRIVATE CURL::libcurl) +endblock() + +block(SCOPE_FOR VARIABLES) + find_package(PkgConfig REQUIRED) + pkg_check_modules(libcurl_pc libcurl REQUIRED IMPORTED_TARGET) + + add_executable(main-pkgconfig main.c) + target_link_libraries(main-pkgconfig PRIVATE PkgConfig::libcurl_pc) +endblock() + +block(SCOPE_FOR VARIABLES) +if(NOT CMAKE_HOST_WIN32) + find_program(CURL_CONFIG NAMES curl-config REQUIRED) + execute_process(COMMAND "${CURL_CONFIG}" --cflags OUTPUT_VARIABLE curl-config-cflags OUTPUT_STRIP_TRAILING_WHITESPACE) + separate_arguments(curl-config-cflags UNIX_COMMAND "${curl-config-cflags}") + execute_process(COMMAND "${CURL_CONFIG}" --libs OUTPUT_VARIABLE curl-config-libs OUTPUT_STRIP_TRAILING_WHITESPACE) + separate_arguments(curl-config-libs UNIX_COMMAND "${curl-config-libs}") + string(REGEX REPLACE "(^-|;-)framework;" "\\1framework " curl-config-libs "${curl-config-libs}") + + add_executable(main-curl-config main.c) + target_compile_options(main-curl-config PRIVATE ${curl-config-cflags}) + target_link_libraries(main-curl-config PRIVATE ${curl-config-libs}) +endif() +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/main.c new file mode 100644 index 0000000..7002d69 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-curl/project/main.c @@ -0,0 +1,10 @@ +#include <curl/curl.h> + +int main() +{ + CURL *curl = curl_easy_init(); + if(curl) { + curl_easy_cleanup(curl); + } + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-curl/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-curl/vcpkg.json new file mode 100644 index 0000000..d778693 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-curl/vcpkg.json @@ -0,0 +1,122 @@ +{ + "name": "vcpkg-ci-curl", + "version-string": "ci", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "curl", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "compression", + "misc", + "security" + ], + "features": { + "compression": { + "description": "Compression features", + "dependencies": [ + { + "name": "curl", + "default-features": false, + "features": [ + "zstd" + ] + }, + { + "$comment": "Known to break aws-sdk-cpp.", + "name": "curl", + "default-features": false, + "features": [ + "brotli" + ], + "platform": "!osx" + } + ] + }, + "misc": { + "description": "Misc features", + "dependencies": [ + { + "name": "curl", + "default-features": false, + "features": [ + "c-ares", + "http2", + "httpsrr", + "idn", + "rtmp", + "ssh", + "ssls-export" + ] + }, + { + "name": "curl", + "default-features": false, + "features": [ + "psl" + ], + "platform": "!uwp" + }, + { + "name": "curl", + "default-features": false, + "features": [ + "ldap", + "tool" + ], + "platform": "!android & !uwp" + } + ] + }, + "security": { + "description": "Security features", + "dependencies": [ + { + "name": "curl", + "default-features": false, + "features": [ + "gsasl", + "mbedtls", + "openssl", + "ssl", + "wolfssl" + ], + "platform": "!uwp" + }, + { + "name": "curl", + "default-features": false, + "features": [ + "gssapi" + ], + "platform": "linux | osx" + }, + { + "name": "curl", + "default-features": false, + "features": [ + "sspi" + ], + "platform": "windows & !uwp" + }, + { + "$comment": "On arm, gnutls crypto symbols clash with openssl.", + "name": "curl", + "default-features": false, + "features": [ + "gnutls" + ], + "platform": "!android & !uwp & !xbox & !arm" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/CMakeLists.txt new file mode 100644 index 0000000..253dd11 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/CMakeLists.txt @@ -0,0 +1,35 @@ +cmake_minimum_required(VERSION 3.30) +project(dartsim-test CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) + +# https://github.com/dartsim/dart/issues/753#issuecomment-264694898 +# https://github.com/dartsim/dart/pull/956/files +if(MSVC) + add_compile_options("/permissive-") +endif() + +block(SCOPE_FOR VARIABLES) + find_package(DART CONFIG REQUIRED) + add_library(target::dart ALIAS dart) + + add_executable(main-dart main.cpp) + target_link_libraries(main-dart PRIVATE target::dart) + + # check link libs from all components + file(GLOB components RELATIVE "${DART_DIR}" "${DART_DIR}/dart_*Component.cmake") + list(TRANSFORM components REPLACE "^dart_(.*)Component.cmake\$" "\\1") + find_package(DART CONFIG COMPONENTS ${components}) + + add_executable(main-all main.cpp) + target_link_libraries(main-all PRIVATE ${DART_LIBRARIES}) +endblock() + +block(SCOPE_FOR VARIABLES) + find_package(PkgConfig REQUIRED) + pkg_check_modules(dartsim_pc dart REQUIRED IMPORTED_TARGET) + + add_executable(main-pkconfig main.cpp) + target_link_libraries(main-pkconfig PRIVATE PkgConfig::dartsim_pc) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/main.cpp new file mode 100644 index 0000000..61bbe04 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/project/main.cpp @@ -0,0 +1,6 @@ +#include <dart/dart.hpp> + +int main() +{ + dart::simulation::WorldPtr world(new dart::simulation::World); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/vcpkg.json new file mode 100644 index 0000000..8579597 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dartsim/vcpkg.json @@ -0,0 +1,54 @@ +{ + "name": "vcpkg-ci-dartsim", + "version-string": "ci", + "description": "Validates dartsim within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "dartsim", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "dartsim", + "default-features": false, + "features": [ + "collision-bullet", + "collision-ode", + "spdlog", + "utils" + ] + }, + { + "name": "dartsim", + "default-features": false, + "features": [ + "utils-urdf" + ], + "platform": "!staticcrt" + }, + { + "name": "dartsim", + "default-features": false, + "features": [ + "gui", + "gui-osg" + ], + "platform": "!arm & !android" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/CMakeLists.txt new file mode 100755 index 0000000..234c04e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/CMakeLists.txt @@ -0,0 +1,31 @@ +cmake_minimum_required(VERSION 3.15) +project(vcpkg_ci_dawn) + +set(CMAKE_CXX_STANDARD 17) + +find_package(glfw3 CONFIG REQUIRED) + +################################################################################ +# Use cmake config # +################################################################################ +find_package(Dawn CONFIG REQUIRED) +add_executable(vcpkg_ci_dawn main.cpp webgpu_glfw3.cpp) +target_link_libraries(vcpkg_ci_dawn PRIVATE glfw dawn::webgpu_dawn) +if (EMSCRIPTEN) + target_link_options(vcpkg_ci_dawn PRIVATE -sASYNCIFY) + set(TARGET_NAME "vcpkg_ci_dawn") + configure_file("${CMAKE_CURRENT_LIST_DIR}/main.html" "${CMAKE_BINARY_DIR}/${TARGET_NAME}.html" @ONLY) +endif () + +################################################################################ +# Use pkg-config # +################################################################################ +find_package(PkgConfig) +pkg_check_modules(webgpu_dawn REQUIRED IMPORTED_TARGET unofficial_webgpu_dawn) +add_executable(vcpkg_ci_dawn_pc main.cpp webgpu_glfw3.cpp) +target_link_libraries(vcpkg_ci_dawn_pc PRIVATE glfw PkgConfig::webgpu_dawn) +if (EMSCRIPTEN) + target_link_options(vcpkg_ci_dawn_pc PRIVATE -sASYNCIFY) + set(TARGET_NAME "vcpkg_ci_dawn_pc") + configure_file("${CMAKE_CURRENT_LIST_DIR}/main.html" "${CMAKE_BINARY_DIR}/${TARGET_NAME}.html" @ONLY) +endif () diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.cpp new file mode 100755 index 0000000..74bf086 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.cpp @@ -0,0 +1,391 @@ +// +// Copyright (c) 2024 xiaozhuai +// + +#define GLFW_INCLUDE_NONE + +#include <cstdio> +#include <string> +#include <vector> + +#include "GLFW/glfw3.h" +#include "webgpu/webgpu_cpp.h" + +#if defined(__EMSCRIPTEN__) +#include "emscripten/emscripten.h" +#endif + +#define LOG(fmt, ...) printf(fmt "\n", ##__VA_ARGS__) + +#if !defined(__PRETTY_FUNCTION__) && !defined(__GNUC__) +#define MY_PRETTY_FUNCTION __FUNCSIG__ +#else +#define MY_PRETTY_FUNCTION __PRETTY_FUNCTION__ +#endif + +#define ASSERT(expr, fmt, ...) \ + do { \ + if (!(expr)) { \ + LOG("Assertion failed: %s:%d, func: \"%s\", expr: \"%s\", message: " /**/ \ + fmt, /**/ \ + __FILE__, __LINE__, MY_PRETTY_FUNCTION, #expr, /**/ \ + ##__VA_ARGS__); \ + abort(); \ + } \ + } while (0) + +wgpu::Instance create_instance() { + wgpu::InstanceDescriptor instance_desc; + std::vector<wgpu::InstanceFeatureName> required_features = { + wgpu::InstanceFeatureName::TimedWaitAny, + }; + instance_desc.requiredFeatureCount = required_features.size(); + instance_desc.requiredFeatures = required_features.data(); + return wgpu::CreateInstance(&instance_desc); +} + +wgpu::Surface create_surface(const wgpu::Instance &instance, GLFWwindow *window); + +wgpu::Adapter request_adapter(const wgpu::Instance &instance, const wgpu::Surface &surface) { + wgpu::RequestAdapterOptions adapter_options; + adapter_options.compatibleSurface = surface; + adapter_options.powerPreference = wgpu::PowerPreference::HighPerformance; + + wgpu::Adapter adapter; + auto adapter_future = instance.RequestAdapter( + &adapter_options, wgpu::CallbackMode::WaitAnyOnly, + [&adapter](wgpu::RequestAdapterStatus status, wgpu::Adapter adapter_ret, wgpu::StringView message) { + ASSERT(status == wgpu::RequestAdapterStatus::Success && adapter_ret != nullptr, "Failed to get adapter: %s", + message.data); + adapter = std::move(adapter_ret); + }); + ASSERT(instance.WaitAny(adapter_future, wgpu::kLimitU64Undefined) == wgpu::WaitStatus::Success, + "Failed to wait for adapter request"); + + return adapter; +} + +void device_lost_callback(const wgpu::Device &, wgpu::DeviceLostReason, wgpu::StringView message) { + LOG("Device lost: %s", message.data); +} + +void device_uncaptured_error_callback(const wgpu::Device &, wgpu::ErrorType type, wgpu::StringView message) { + const char *error_type; + switch (type) { + case wgpu::ErrorType::Validation: + error_type = "Validation"; + break; + case wgpu::ErrorType::OutOfMemory: + error_type = "Out of memory"; + break; + case wgpu::ErrorType::Internal: + error_type = "Internal"; + break; + case wgpu::ErrorType::Unknown: + error_type = "Unknown"; + break; + default: + ASSERT(false, "Unknown ErrorType"); + } + LOG("Uncaptured Error %s: %s", error_type, message.data); +} + +wgpu::Device request_device(const wgpu::Instance &instance, const wgpu::Adapter &adapter) { + wgpu::DeviceDescriptor device_desc; + + device_desc.SetDeviceLostCallback(wgpu::CallbackMode::AllowSpontaneous, device_lost_callback); + device_desc.SetUncapturedErrorCallback(device_uncaptured_error_callback); + + wgpu::Device device; + auto device_future = adapter.RequestDevice( + &device_desc, wgpu::CallbackMode::WaitAnyOnly, + [&device](wgpu::RequestDeviceStatus status, wgpu::Device device_ret, wgpu::StringView message) { + ASSERT(status == wgpu::RequestDeviceStatus::Success && device_ret != nullptr, "Failed to get device: %s", + message.data); + device = std::move(device_ret); + }); + ASSERT(instance.WaitAny(device_future, wgpu::kLimitU64Undefined) == wgpu::WaitStatus::Success, + "Failed to wait for device request"); + + return device; +} + +wgpu::ShaderModule create_shader(const wgpu::Device &device, const std::string &shader_code) { + wgpu::ShaderSourceWGSL shader_code_desc; + shader_code_desc.sType = wgpu::SType::ShaderSourceWGSL; + shader_code_desc.code = shader_code.c_str(); + wgpu::ShaderModuleDescriptor shader_desc; + shader_desc.nextInChain = &shader_code_desc; + return device.CreateShaderModule(&shader_desc); +} + +struct alignas(16) Uniforms { + struct { + float width = 0.0f; + float height = 0.0f; + } resolution; + float time = 0.0f; +}; + +void glfw_error_callback(int error, const char *description) { LOG("GLFW error, %d, %s", error, description); } + +struct AppState { + wgpu::Instance instance; + wgpu::Surface surface; + wgpu::Adapter adapter; + wgpu::Device device; + wgpu::Queue queue; + wgpu::SurfaceConfiguration surface_config; + int surface_width = 0; + int surface_height = 0; +}; + +int main() { + glfwSetErrorCallback(glfw_error_callback); + ASSERT(glfwInit(), "GLFW init failed"); + glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API); + auto *window = glfwCreateWindow(1024, 1024, "vcpkg-ci-dawn", nullptr, nullptr); + + AppState state; + state.instance = create_instance(); + state.surface = create_surface(state.instance, window); + state.adapter = request_adapter(state.instance, state.surface); + state.device = request_device(state.instance, state.adapter); + state.queue = state.device.GetQueue(); + + wgpu::SurfaceCapabilities surface_capabilities; + state.surface.GetCapabilities(state.adapter, &surface_capabilities); + glfwGetFramebufferSize(window, &state.surface_width, &state.surface_height); + + state.surface_config.device = state.device; + state.surface_config.usage = wgpu::TextureUsage::RenderAttachment; + state.surface_config.format = surface_capabilities.formats[0]; + state.surface_config.presentMode = surface_capabilities.presentModes[0]; + state.surface_config.alphaMode = surface_capabilities.alphaModes[0]; + state.surface_config.width = state.surface_width; + state.surface_config.height = state.surface_height; + state.surface.Configure(&state.surface_config); + + glfwSetWindowUserPointer(window, &state); + + glfwSetKeyCallback(window, [](GLFWwindow *window, int key, int scancode, int action, int mods) { + if (key == GLFW_KEY_ESCAPE && action == GLFW_RELEASE) { + glfwSetWindowShouldClose(window, GLFW_TRUE); + } + }); + glfwSetFramebufferSizeCallback(window, [](GLFWwindow *window, int width, int height) { + auto &state = *static_cast<AppState *>(glfwGetWindowUserPointer(window)); + state.surface_width = width; + state.surface_height = height; + state.surface_config.width = width; + state.surface_config.height = height; + state.surface.Configure(&state.surface_config); + }); + + std::string shader_source = R"( +struct Uniforms { + resolution: vec2f, + time: f32, +}; + +@group(0) +@binding(0) +var<uniform> uniforms: Uniforms; + +struct VertexInput { + @location(0) + pos: vec2f, +}; + +struct VertexOutput { + @builtin(position) + pos: vec4f, +}; + +@vertex +fn vs_main(input: VertexInput) -> VertexOutput { + var output: VertexOutput; + output.pos = vec4f(input.pos, 0.0, 1.0); + return output; +} + +struct FragmentInput { + @builtin(position) + coord: vec4f, +}; + +struct FragmentOutput { + @location(0) + color: vec4f, +}; + +fn palette(t: f32) -> vec3f{ + let a = vec3f(0.5, 0.5, 0.5); + let b = vec3f(0.5, 0.5, 0.5); + let c = vec3f(1.0, 1.0, 1.0); + let d = vec3f(0.263, 0.416, 0.557); + return a + b * cos(6.28318 * (c * t + d)); +} + +@fragment +fn fs_main(input: FragmentInput) -> FragmentOutput { + var uv = (input.coord.xy * 2.0 - uniforms.resolution) / min(uniforms.resolution.x, uniforms.resolution.y); + let uv0 = uv; + var color = vec3f(0.0); + for (var i: f32 = 0.0; i < 4.0; i += 1.0) { + uv = fract(uv * 1.5) - 0.5; + var d = length(uv) * exp(-length(uv0)); + let col = palette(length(uv0) + i * 0.4 + uniforms.time * 0.4); + d = sin(d * 8.0 + uniforms.time) / 8.0; + d = abs(d); + d = pow(0.01 / d, 1.2); + color += col * d; + } + var output: FragmentOutput; + output.color = vec4f(color, 1.0); + return output; +} +)"; + auto shader_module = create_shader(state.device, shader_source); + + constexpr float vertices[12] = {-1.0, -1.0, 1.0, -1.0, 1.0, 1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0}; + constexpr int vertex_count = std::size(vertices) / 2; + wgpu::BufferDescriptor vertex_buffer_desc; + vertex_buffer_desc.size = sizeof(vertices); + vertex_buffer_desc.usage = wgpu::BufferUsage::Vertex | wgpu::BufferUsage::CopyDst; + wgpu::Buffer vertex_buffer = state.device.CreateBuffer(&vertex_buffer_desc); + state.queue.WriteBuffer(vertex_buffer, 0, vertices, sizeof(vertices)); + + Uniforms uniforms; + wgpu::BufferDescriptor uniform_buffer_desc; + uniform_buffer_desc.size = sizeof(uniforms); + uniform_buffer_desc.usage = wgpu::BufferUsage::Uniform | wgpu::BufferUsage::CopyDst; + wgpu::Buffer uniform_buffer = state.device.CreateBuffer(&uniform_buffer_desc); + state.queue.WriteBuffer(uniform_buffer, 0, &uniforms, sizeof(uniforms)); + + wgpu::RenderPipelineDescriptor pipeline_desc; + + std::vector<wgpu::VertexAttribute> vertex_attributes(1); + vertex_attributes[0].format = wgpu::VertexFormat::Float32x2; + vertex_attributes[0].offset = 0; + vertex_attributes[0].shaderLocation = 0; + std::vector<wgpu::VertexBufferLayout> vertex_layouts(1); + vertex_layouts[0].arrayStride = 2 * sizeof(float); + vertex_layouts[0].attributeCount = vertex_attributes.size(); + vertex_layouts[0].attributes = vertex_attributes.data(); + vertex_layouts[0].stepMode = wgpu::VertexStepMode::Vertex; + + pipeline_desc.vertex.bufferCount = vertex_layouts.size(); + pipeline_desc.vertex.buffers = vertex_layouts.data(); + + pipeline_desc.vertex.module = shader_module; + pipeline_desc.vertex.entryPoint = "vs_main"; + pipeline_desc.vertex.constantCount = 0; + pipeline_desc.vertex.constants = nullptr; + + pipeline_desc.primitive.topology = wgpu::PrimitiveTopology::TriangleList; + pipeline_desc.primitive.stripIndexFormat = wgpu::IndexFormat::Undefined; + pipeline_desc.primitive.frontFace = wgpu::FrontFace::CCW; + pipeline_desc.primitive.cullMode = wgpu::CullMode::None; + + wgpu::FragmentState fragment_state; + fragment_state.module = shader_module; + fragment_state.entryPoint = "fs_main"; + fragment_state.constantCount = 0; + fragment_state.constants = nullptr; + + wgpu::BlendState blend_state; + blend_state.color.srcFactor = wgpu::BlendFactor::SrcAlpha; + blend_state.color.dstFactor = wgpu::BlendFactor::OneMinusSrcAlpha; + blend_state.color.operation = wgpu::BlendOperation::Add; + blend_state.alpha.srcFactor = wgpu::BlendFactor::Zero; + blend_state.alpha.dstFactor = wgpu::BlendFactor::One; + blend_state.alpha.operation = wgpu::BlendOperation::Add; + + wgpu::ColorTargetState color_target; + color_target.format = state.surface_config.format; + color_target.blend = &blend_state; + color_target.writeMask = wgpu::ColorWriteMask::All; + + fragment_state.targetCount = 1; + fragment_state.targets = &color_target; + pipeline_desc.fragment = &fragment_state; + + pipeline_desc.depthStencil = nullptr; + pipeline_desc.multisample.count = 1; + pipeline_desc.multisample.mask = ~0u; + + pipeline_desc.multisample.alphaToCoverageEnabled = false; + pipeline_desc.layout = nullptr; + + wgpu::RenderPipeline pipeline = state.device.CreateRenderPipeline(&pipeline_desc); + + std::vector<wgpu::BindGroupEntry> bind_group_entries(1); + bind_group_entries[0].binding = 0; + bind_group_entries[0].buffer = uniform_buffer; + bind_group_entries[0].size = uniform_buffer.GetSize(); + + wgpu::BindGroupDescriptor bind_group_desc; + bind_group_desc.layout = pipeline.GetBindGroupLayout(0); + bind_group_desc.entryCount = bind_group_entries.size(); + bind_group_desc.entries = bind_group_entries.data(); + wgpu::BindGroup bind_group = state.device.CreateBindGroup(&bind_group_desc); + + const double start_time = glfwGetTime(); + while (!glfwWindowShouldClose(window)) { + glfwPollEvents(); +#if defined(__EMSCRIPTEN__) + emscripten_sleep(0); +#endif + + const double time = glfwGetTime() - start_time; + + wgpu::SurfaceTexture surface_texture; + state.surface.GetCurrentTexture(&surface_texture); + ASSERT(surface_texture.status == wgpu::SurfaceGetCurrentTextureStatus::SuccessOptimal || + surface_texture.status == wgpu::SurfaceGetCurrentTextureStatus::SuccessSuboptimal, + "Failed to get current texture"); + if (surface_texture.status == wgpu::SurfaceGetCurrentTextureStatus::SuccessSuboptimal) { + LOG("Surface texture is suboptimal"); + } + + wgpu::Texture texture = surface_texture.texture; + wgpu::TextureView frame = texture.CreateView(); + + uniforms.resolution.width = static_cast<float>(texture.GetWidth()); + uniforms.resolution.height = static_cast<float>(texture.GetHeight()); + uniforms.time = static_cast<float>(time); + state.queue.WriteBuffer(uniform_buffer, 0, &uniforms, sizeof(uniforms)); + + auto encoder = state.device.CreateCommandEncoder(); + + wgpu::RenderPassColorAttachment color_attachment; + color_attachment.view = frame; + color_attachment.loadOp = wgpu::LoadOp::Clear; + color_attachment.storeOp = wgpu::StoreOp::Store; + color_attachment.clearValue = {0.1f, 0.2f, 0.3f, 1.0f}; + wgpu::RenderPassDescriptor pass_desc; + pass_desc.colorAttachmentCount = 1; + pass_desc.colorAttachments = &color_attachment; + pass_desc.depthStencilAttachment = nullptr; + + auto pass = encoder.BeginRenderPass(&pass_desc); + pass.SetPipeline(pipeline); + pass.SetVertexBuffer(0, vertex_buffer, 0, vertex_buffer.GetSize()); + pass.SetBindGroup(0, bind_group, 0, nullptr); + pass.Draw(vertex_count); + pass.End(); + + wgpu::CommandBuffer command_buffer = encoder.Finish(); + state.queue.Submit(1, &command_buffer); + +#if !defined(__EMSCRIPTEN__) + ASSERT(state.surface.Present(), "Failed to present the surface"); + state.device.Tick(); +#endif + } + + glfwDestroyWindow(window); + glfwTerminate(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.html b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.html new file mode 100755 index 0000000..37f8b9e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/main.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>@TARGET_NAME@</title> + <style> + html, body { margin: 0; padding: 0; width: 100%; height: 100%; } + .canvas-container { width: 100%; height: 100%; display: flex; justify-content: center; align-items: center; } + #canvas { max-width: 100%; max-height: 100%; } + </style> +</head> +<body> +<div class="canvas-container"> + <canvas id="canvas" width="1024" height="1024"></canvas> +</div> +</body> +<script type="text/javascript">var Module = {canvas: document.getElementById('canvas')};</script> +<script type="text/javascript" src="@TARGET_NAME@.js"></script> +</html> diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/webgpu_glfw3.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/webgpu_glfw3.cpp new file mode 100644 index 0000000..269ea1f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/project/webgpu_glfw3.cpp @@ -0,0 +1,121 @@ +// +// Copyright (c) 2025 xiaozhuai +// + +#define GLFW_INCLUDE_NONE + +#include <memory> + +#include "GLFW/glfw3.h" +#include "webgpu/webgpu_cpp.h" + +#if defined(_WIN32) +#define GLFW_EXPOSE_NATIVE_WIN32 +#endif + +#if defined(__APPLE__) +#define GLFW_EXPOSE_NATIVE_COCOA +#endif + +#if defined(__linux__) || defined(__FreeBSD__) || defined(__OpenBSD__) +#define DAWN_USE_X11 +#endif + +#if defined(DAWN_USE_X11) +#define GLFW_EXPOSE_NATIVE_X11 +#endif + +#if defined(DAWN_USE_WAYLAND) +#define GLFW_EXPOSE_NATIVE_WAYLAND +#endif + +#if defined(__EMSCRIPTEN__) +#include "emscripten/emscripten.h" +#else +#include "GLFW/glfw3native.h" +#endif + +#if defined(__APPLE__) +#include <objc/message.h> +#include <objc/objc.h> +#include <objc/runtime.h> +template <typename T, typename... Args> +T objc_call(id obj, const char *sel, Args... args) { + using FuncPtr = T (*)(id, SEL, Args...); + return reinterpret_cast<FuncPtr>(objc_msgSend)(obj, sel_registerName(sel), args...); +} +template <typename T, typename... Args> +T objc_call(const char *clazz, const char *sel, Args... args) { + return objc_call<T>(reinterpret_cast<id>(objc_getClass(clazz)), sel, args...); +} +#endif + +std::unique_ptr<wgpu::ChainedStruct> setup_window_and_get_surface_descriptor(GLFWwindow *window) { + if (glfwGetWindowAttrib(window, GLFW_CLIENT_API) != GLFW_NO_API) { + return nullptr; + } + +#if defined(__EMSCRIPTEN__) + auto desc = std::make_unique<wgpu::EmscriptenSurfaceSourceCanvasHTMLSelector>(); + desc->selector = "#canvas"; + return desc; +#elif defined(_WIN32) + auto desc = std::make_unique<wgpu::SurfaceSourceWindowsHWND>(); + desc->hwnd = glfwGetWin32Window(window); + desc->hinstance = GetModuleHandle(nullptr); + return desc; +#elif defined(__APPLE__) + // NSWindow *ns_window = glfwGetCocoaWindow(window); + // NSView *view = [ns_window contentView]; + // [view setWantsLayer:YES]; + // CAMetalLayer *layer = [CAMetalLayer layer]; + // CGFloat scale_factor = [ns_window backingScaleFactor]; + // [layer setContentsScale:scale_factor]; + // [view setLayer:layer]; + auto ns_window = glfwGetCocoaWindow(window); + CFRetain(ns_window); + auto view = objc_call<id>(ns_window, "contentView"); + CFRetain(view); + objc_call<void, BOOL>(view, "setWantsLayer:", YES); + auto layer = objc_call<id>("CAMetalLayer", "layer"); + auto scale_factor = objc_call<CGFloat>(ns_window, "backingScaleFactor"); + objc_call<void, CGFloat>(layer, "setContentsScale:", scale_factor); + objc_call<void, id>(view, "setLayer:", layer); + auto desc = std::make_unique<wgpu::SurfaceSourceMetalLayer>(); + desc->layer = layer; + CFRelease(view); + CFRelease(ns_window); + return desc; +#elif defined(DAWN_USE_WAYLAND) || defined(DAWN_USE_X11) +#if defined(GLFW_PLATFORM_WAYLAND) && defined(DAWN_USE_WAYLAND) + if (glfwGetPlatform() == GLFW_PLATFORM_WAYLAND) { + auto desc = std::make_unique<wgpu::SurfaceSourceWaylandSurface>(); + desc->display = glfwGetWaylandDisplay(); + desc->surface = glfwGetWaylandWindow(window); + return desc; + } else // NOLINT(readability/braces) +#endif +#if defined(DAWN_USE_X11) + { + auto desc = std::make_unique<wgpu::SurfaceSourceXlibWindow>(); + desc->display = glfwGetX11Display(); + desc->window = glfwGetX11Window(window); + return desc; + } +#else + { + return nullptr; + } +#endif +#else + return nullptr; +#endif +} + +wgpu::Surface create_surface(const wgpu::Instance &instance, GLFWwindow *window) { + auto chainedDescriptor = setup_window_and_get_surface_descriptor(window); + wgpu::SurfaceDescriptor descriptor; + descriptor.nextInChain = chainedDescriptor.get(); + wgpu::Surface surface = instance.CreateSurface(&descriptor); + return surface; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dawn/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/vcpkg.json new file mode 100644 index 0000000..4729e40 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dawn/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "vcpkg-ci-dawn", + "version-date": "2025-09-28", + "description": "Validates dawn", + "license": null, + "supports": "!uwp & !android & !ios", + "dependencies": [ + "dawn", + "glfw3", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/portfile.cmake new file mode 100644 index 0000000..a1b99a7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+)
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/CMakeLists.txt new file mode 100644 index 0000000..f077136 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(dbus-cxx-test CXX)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(dbus-cxx CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE dbus-cxx::dbus-cxx)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/main.cpp new file mode 100644 index 0000000..dcef36c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/project/main.cpp @@ -0,0 +1,6 @@ +#include <dbus-cxx.h>
+int main()
+{
+ auto connection = DBus::Connection::create(DBus::BusType::SESSION);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/vcpkg.json new file mode 100644 index 0000000..e4f9d9a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dbus-cxx/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-dbus-cxx", + "version-string": "ci", + "description": "Validates dbus-cxx", + "dependencies": [ + "dbus-cxx", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/CMakeLists.txt new file mode 100644 index 0000000..843bb2f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.10) +project(dcmtk-test CXX) + +set(CMAKE_CXX_STANDARD 17) + +find_package(DCMTK CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE DCMTK::DCMTK) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(DCMTK dcmtk REQUIRED IMPORTED_TARGET) + +add_executable(main-pkgconfig main.cpp) +target_link_libraries(main-pkgconfig PRIVATE PkgConfig::DCMTK) +target_compile_options(main-pkgconfig PRIVATE "\$<\$<CXX_COMPILER_ID:MSVC>:/Zc:__cplusplus>") diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/main.cpp new file mode 100644 index 0000000..c807e95 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/project/main.cpp @@ -0,0 +1,9 @@ +#include <dcmtk/dcmdata/dcjson.h> +#include <dcmtk/dcmtls/tlslayer.h> + +int main() +{ + auto djfp = DcmJsonFormatPretty(OFTrue); + DcmTLSTransportLayer::initializeOpenSSL(); // https://github.com/microsoft/vcpkg/issues/38476 + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/vcpkg.json new file mode 100644 index 0000000..18bd2f0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-dcmtk/vcpkg.json @@ -0,0 +1,25 @@ +{ + "name": "vcpkg-ci-dcmtk", + "version-string": "ci", + "description": "Port to force features of dcmtk within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "dcmtk", + "features": [ + "iconv", + "openssl", + "tiff", + "tools", + "xml2", + "zlib", + "openjpeg" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake new file mode 100644 index 0000000..7485803 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/portfile.cmake @@ -0,0 +1,21 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_install() + +if(NOT VCPKG_CROSSCOMPILING) + if(CMAKE_HOST_WIN32) + vcpkg_host_path_list(PREPEND ENV{PATH} "${CURRENT_INSTALLED_DIR}/bin") + elseif(CMAKE_HOST_APPLE) + vcpkg_host_path_list(PREPEND ENV{DYLD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib") + else() + vcpkg_host_path_list(PREPEND ENV{LD_LIBRARY_PATH} "${CURRENT_INSTALLED_DIR}/lib") + endif() + vcpkg_execute_required_process( + COMMAND "${CURRENT_PACKAGES_DIR}/bin/${PORT}/main" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME release-test + ) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt new file mode 100644 index 0000000..3c51fa2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.16) +project(duckdb-test C CXX) + +add_executable(main main.c) + +find_package(DuckDB CONFIG REQUIRED) +if(BUILD_SHARED_LIBS) + add_library(imported::duckdb ALIAS duckdb) +else() + add_library(imported::duckdb ALIAS duckdb_static) +endif() +target_link_libraries(main PRIVATE imported::duckdb) +install(TARGETS main RUNTIME DESTINATION bin/vcpkg-ci-duckdb) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/main.c new file mode 100644 index 0000000..6dfa22b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/project/main.c @@ -0,0 +1,33 @@ +#include <stdio.h> +#include <duckdb.h> + +int main() +{ + duckdb_database db; + if (duckdb_open(NULL, &db) == DuckDBError) { + printf("open failed\n"); + return 1; + } + duckdb_connection con; + if (duckdb_connect(db, &con) == DuckDBError) { + printf("connect failed\n"); + return 2; + } + const char* query_icu = + "LOAD icu;" + "SELECT current_localtime();" + "PRAGMA collations;" + "SELECT list(collname) FROM pragma_collations();" + ; + duckdb_result result; + if (duckdb_query(con, query_icu, &result) == DuckDBError) { + printf("icu query failed: %s\n", duckdb_result_error(&result)); + return 3; + } + else { + printf("success\n"); + } + duckdb_disconnect(&con); + duckdb_close(&db); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json new file mode 100644 index 0000000..6c113d7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-duckdb/vcpkg.json @@ -0,0 +1,18 @@ +{ + "name": "vcpkg-ci-duckdb", + "version-string": "ci", + "description": "Test the icu feature", + "license": "BSD-3-Clause", + "dependencies": [ + { + "name": "duckdb", + "features": [ + "icu" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/portfile.cmake new file mode 100644 index 0000000..d40bca1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/portfile.cmake @@ -0,0 +1,19 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO Exiv2/exiv2 + REF v0.28.7 + SHA512 b53f4989abcd5d346f2a9c726a06707c47e1990ecb2e5e193c963e01d452fefe4dddd14e25eb08ef35e2f8288b8ec4bdee60725aa7dcd6b1c0348ed56c803fc0 + HEAD_REF master +) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DSOURCE_PATH=${SOURCE_PATH}" + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/project/CMakeLists.txt new file mode 100644 index 0000000..f02d2f2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/project/CMakeLists.txt @@ -0,0 +1,19 @@ +cmake_minimum_required(VERSION 3.10) +project(exiv2-test CXX) + +set(CMAKE_CXX_STANDARD 11) + +block() + find_package(exiv2 CONFIG REQUIRED) + + add_executable(main "${SOURCE_PATH}/samples/exifdata.cpp") + target_link_libraries(main PRIVATE Exiv2::exiv2lib) +endblock() + +block() + find_package(PkgConfig REQUIRED) + pkg_check_modules(exiv2 exiv2 REQUIRED IMPORTED_TARGET) + + add_executable(main-pkgconfig "${SOURCE_PATH}/samples/exifdata.cpp") + target_link_libraries(main-pkgconfig PRIVATE PkgConfig::exiv2) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/vcpkg.json new file mode 100644 index 0000000..7d1e244 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-exiv2/vcpkg.json @@ -0,0 +1,36 @@ +{ + "name": "vcpkg-ci-exiv2", + "version-string": "ci", + "description": "Port to validate exiv2 within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "exiv2", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "exiv2", + "features": [ + "bmff", + "nls", + "png", + "xmp" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/CMakeLists.txt new file mode 100644 index 0000000..0759a0b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/CMakeLists.txt @@ -0,0 +1,34 @@ +cmake_minimum_required(VERSION 3.30) +project(ffmpeg-test C) + +find_package(FFMPEG REQUIRED) + +add_executable(main main.c) +target_include_directories(main PRIVATE ${FFMPEG_INCLUDE_DIRS}) +target_link_directories(main PRIVATE ${FFMPEG_LIBRARY_DIRS}) +target_link_libraries(main PRIVATE ${FFMPEG_LIBRARIES}) + +# FAQ: using the static lib in a shared lib +# https://ffmpeg.org/platform.html#Advanced-linking-configuration +if(UNIX AND NOT BUILD_SHARED_LIBS) + add_library(shared SHARED main.c) + target_include_directories(shared PRIVATE ${FFMPEG_INCLUDE_DIRS}) + target_link_directories(shared PRIVATE ${FFMPEG_LIBRARY_DIRS}) + target_link_libraries(shared PRIVATE ${FFMPEG_LIBRARIES}) + if(NOT APPLE) + target_link_options(shared PRIVATE -Wl,-Bsymbolic) + endif() +endif() + + +find_package(PkgConfig REQUIRED) +pkg_check_modules(ffmpeg_pc + libavcodec libavfilter libavutil libswscale libavdevice libavformat libswresample + REQUIRED + IMPORTED_TARGET +) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::ffmpeg_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/main.c new file mode 100644 index 0000000..ae557e4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/project/main.c @@ -0,0 +1,11 @@ +#include <stdio.h> +#include "libavcodec/avcodec.h" +#include "libavutil/avutil.h" + +int main() +{ + char codecVersions[256]; + avcodec_find_encoder(AV_CODEC_ID_H264); + printf("ffmpeg version: %s\n", av_version_info()); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/vcpkg.json new file mode 100644 index 0000000..27dc9ec --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ffmpeg/vcpkg.json @@ -0,0 +1,204 @@ +{ + "name": "vcpkg-ci-ffmpeg", + "version-string": "ci", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "dependencies": [ + { + "name": "ffmpeg", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "ci" + ], + "features": { + "ci": { + "description": "vcpkg CI feature configuration", + "dependencies": [ + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "avcodec", + "avdevice", + "avfilter", + "avformat", + "avresample", + "bzip2", + "freetype", + "gpl", + "iconv", + "lzma", + "mp3lame", + "nonfree", + "openh264", + "openjpeg", + "openmpt", + "openssl", + "opus", + "postproc", + "snappy", + "soxr", + "speex", + "swresample", + "swscale", + "theora", + "vorbis", + "vpx", + "webp", + "xml2", + "zlib" + ] + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "alsa" + ], + "platform": "linux" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "sdl2" + ], + "platform": "!osx" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "ass", + "dvdvideo", + "ffmpeg", + "fontconfig", + "fribidi", + "modplug", + "opencl", + "srt" + ], + "platform": "!uwp" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "fdk-aac" + ], + "platform": "!android" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "ilbc" + ], + "platform": "!(arm & uwp)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "ssh" + ], + "platform": "!(uwp | arm)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "x264" + ], + "platform": "!(arm & windows)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "drawtext" + ], + "platform": "!(uwp | android)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "dav1d" + ], + "platform": "!(uwp | arm | x86 | osx)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "aom" + ], + "platform": "!(windows & arm) & !uwp" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "x265" + ], + "platform": "!uwp & !(arm & windows)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "avisynthplus" + ], + "platform": "windows & !arm & !uwp & !static" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "tesseract" + ], + "platform": "!(windows & arm) & !static & !uwp" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "opengl" + ], + "platform": "!uwp & !(arm64 & windows) & !android" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "qsv" + ], + "platform": "!arm & (android | linux | windows) & !uwp" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "nvcodec" + ], + "platform": "!android & !osx & !uwp & !(arm64 & windows)" + }, + { + "name": "ffmpeg", + "default-features": false, + "features": [ + "vulkan" + ], + "platform": "(linux | windows) & !arm & !uwp" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/CMakeLists.txt new file mode 100644 index 0000000..d62d080 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.30) +project(fluidsynth-test LANGUAGES C CXX) + +find_package(FluidSynth CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE FluidSynth::libfluidsynth) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(fluidsynth_pc fluidsynth REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::fluidsynth_pc) +set_target_properties(main-pkconfig PROPERTIES LINKER_LANGUAGE CXX) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/main.c new file mode 100644 index 0000000..0a4f7a2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/project/main.c @@ -0,0 +1,12 @@ +#include <stdio.h> +#include <fluidsynth.h> + +int main() +{ + fluid_settings_t* settings = new_fluid_settings(); + int ret = fluid_settings_setint(settings, "vcpkg.test", 123); + delete_fluid_settings(settings); + + printf("Result: %d\n", ret); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/vcpkg.json new file mode 100644 index 0000000..b9cca1b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-fluidsynth/vcpkg.json @@ -0,0 +1,47 @@ +{ + "name": "vcpkg-ci-fluidsynth", + "version-string": "ci", + "description": "Port to validate fluidsynth in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "fluidsynth", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "fluidsynth", + "features": [ + "pulseaudio" + ], + "platform": "linux" + }, + { + "name": "fluidsynth", + "features": [ + "sndfile" + ], + "platform": "!xbox" + }, + { + "name": "fluidsynth", + "features": [ + "libinstpatch" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-folly/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-folly/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-folly/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-folly/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-folly/vcpkg.json new file mode 100644 index 0000000..7308e8b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-folly/vcpkg.json @@ -0,0 +1,42 @@ +{ + "name": "vcpkg-ci-folly", + "version-string": "ci", + "description": "Port to force features of folly within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "folly", + "default-features": false + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "folly", + "features": [ + "bzip2", + { + "name": "libaio", + "platform": "linux" + }, + "libsodium", + { + "name": "liburing", + "platform": "linux" + }, + "lz4", + "lzma", + "snappy", + "zstd" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/vcpkg.json new file mode 100644 index 0000000..ca62751 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-freerdp/vcpkg.json @@ -0,0 +1,31 @@ +{ + "name": "vcpkg-ci-freerdp", + "version-string": "ci", + "description": "Force non-default features of freerdp within vcpkg CI", + "homepage": "https://github.com/microsoft/vcpkg", + "dependencies": [ + { + "name": "freerdp", + "features": [ + "client", + "ffmpeg" + ] + }, + { + "name": "freerdp", + "features": [ + "x11" + ], + "platform": "linux" + }, + { + "name": "freerdp", + "features": [ + "server", + "urbdrc", + "winpr-tools" + ], + "platform": "!android & !ios & !uwp" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gdal/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json new file mode 100644 index 0000000..ee66c61 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gdal/vcpkg.json @@ -0,0 +1,64 @@ +{ + "name": "vcpkg-ci-gdal", + "version-date": "2023-12-28", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "gdal", + "features": [ + "archive", + "freexl" + ] + }, + { + "name": "gdal", + "features": [ + "postgresql" + ], + "platform": "linux" + }, + { + "name": "gdal", + "features": [ + "cfitsio", + "kea", + "poppler" + ], + "platform": "native" + }, + { + "name": "gdal", + "features": [ + "arrow", + "arrow-adbc", + "parquet" + ], + "platform": "(arm64 | x64) & !linux" + }, + { + "name": "gdal", + "features": [ + "mysql-libmariadb" + ], + "platform": "windows & x86" + }, + { + "name": "gdal", + "features": [ + "aws-ec2-windows" + ], + "platform": "windows & !mingw" + }, + { + "name": "tiff", + "features": [ + "lerc", + "libdeflate", + "webp", + "zstd" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ggml/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-ggml/portfile.cmake new file mode 100644 index 0000000..7a16fdb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ggml/portfile.cmake @@ -0,0 +1,14 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO ggml-org/ggml + REF v0.9.1 + SHA512 c31aeaaba328cd217f34191f1ce87720bb34dc39dc036f2ba8c92710636706f5be2cfcf86dc8c38ec737b020908da0e136447de10e7d9e6db698c812e7d21ae3 + HEAD_REF master +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}/examples/test-cmake" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ggml/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-ggml/vcpkg.json new file mode 100644 index 0000000..caddf96 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ggml/vcpkg.json @@ -0,0 +1,128 @@ +{ + "name": "vcpkg-ci-ggml", + "version-string": "ci", + "description": "Port to validate ggml", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "$comment": "Lacks default (CPU) backend on arm64 windows", + "name": "ggml", + "default-features": false, + "features": [ + { + "name": "vulkan", + "platform": "windows & arm64" + } + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "blas", + "platform": "!(windows & static)" + }, + { + "$comment": "Lacks pkg-config link libs for static builds", + "name": "cuda", + "platform": "windows & x64 & !uwp & !xbox & !static" + }, + { + "name": "metal", + "platform": "osx" + }, + { + "name": "opencl", + "platform": "!arm32" + }, + { + "name": "openmp", + "platform": "!osx" + }, + { + "name": "vulkan", + "platform": "!x86" + } + ], + "features": { + "blas": { + "description": "Enable BLAS support", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "blas" + ] + } + ] + }, + "cuda": { + "description": "Enable CUDA support", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "cuda" + ] + } + ] + }, + "metal": { + "description": "Enable Metal support", + "supports": "osx", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "metal" + ] + } + ] + }, + "opencl": { + "description": "Enable OpenCL support", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "opencl" + ] + } + ] + }, + "openmp": { + "description": "Enable OpenMP support", + "supports": "!osx", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "openmp" + ] + } + ] + }, + "vulkan": { + "description": "Enable Vulkan support", + "supports": "!x86", + "dependencies": [ + { + "name": "ggml", + "default-features": false, + "features": [ + "vulkan" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gmime/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/portfile.cmake new file mode 100644 index 0000000..9081513 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/portfile.cmake @@ -0,0 +1,11 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DFEATURES=${FEATURES}" + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/CMakeLists.txt new file mode 100644 index 0000000..d64e5ac --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.10) + +project(vcpkg-ci-gmime C) + +set(CMAKE_C_STANDARD 11) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(gmime REQUIRED IMPORTED_TARGET gmime-3.0) + +add_executable(main main.c) +target_link_libraries(main PRIVATE PkgConfig::gmime) + +if("crypto" IN_LIST FEATURES) + target_compile_definitions(main PRIVATE ENABLE_CRYPTO) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/main.c new file mode 100644 index 0000000..8431aa3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/project/main.c @@ -0,0 +1,26 @@ +#include <glib.h> +#include <gmime/gmime.h> + +void verify_callback(GMimeObject *parent, GMimeObject *part, gpointer user_data) +{ +#ifdef ENABLE_CRYPTO + if (GMIME_IS_MULTIPART_SIGNED(part)) + { + GMimeMultipartSigned *mps = (GMimeMultipartSigned *)part; + GError *err = NULL; + GMimeSignatureList *signatures = g_mime_multipart_signed_verify(mps, GMIME_VERIFY_NONE, &err); + g_object_unref(signatures); + } +#endif +} + +int main() +{ + g_mime_init(); + GMimeParser *parser = g_mime_parser_new(); + GMimeMessage *message = g_mime_parser_construct_message(parser, NULL); + g_mime_message_foreach(message, verify_callback, NULL); + g_object_unref(message); + g_object_unref(parser); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gmime/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/vcpkg.json new file mode 100644 index 0000000..cbef40d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gmime/vcpkg.json @@ -0,0 +1,31 @@ +{ + "name": "vcpkg-ci-gmime", + "version-string": "ci", + "description": "Validates gmime", + "dependencies": [ + "gmime", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "crypto", + "platform": "!windows | mingw" + } + ], + "features": { + "crypto": { + "description": "gmime[crypo]", + "dependencies": [ + { + "name": "gmime", + "features": [ + "crypto" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/portfile.cmake new file mode 100644 index 0000000..6d23f0a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/portfile.cmake @@ -0,0 +1,22 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# Using release typelibs also for debug: +# vcpkg is unable to build the debug variant for MSVC +# as long as it doesn't install the python interpreter +# for the debug CRT. +set(ENV{GI_TYPELIB_PATH} "${CURRENT_INSTALLED_DIR}/lib/girepository-1.0") + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_check_features(OUT_FEATURE_OPTIONS options + FEATURES + run-test RUN_TEST +) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + ${options} + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build(ADD_BIN_TO_PATH) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/CMakeLists.txt new file mode 100644 index 0000000..24119e2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.30) +project(gobject-introspection-test C) + +option(RUN_TEST "Run the test program") + +set(CMAKE_SKIP_RPATH FALSE) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(gobject-introspection_pc gobject-introspection-1.0 REQUIRED IMPORTED_TARGET) + +add_executable(main-pkgconfig main.c) +target_link_libraries(main-pkgconfig PRIVATE + PkgConfig::gobject-introspection_pc +) + +add_custom_target(run-test + COMMAND main-pkgconfig + COMMENT "Running the test program" +) +if(RUN_TEST) + set_target_properties(run-test PROPERTIES EXCLUDE_FROM_ALL 0) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/main.c new file mode 100644 index 0000000..d6f41a6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/project/main.c @@ -0,0 +1,39 @@ +#include <girepository.h> +#include <stdio.h> + +int main() +{ + GError *error = NULL; + + GIRepository *repository = g_irepository_get_default(); + GSList* paths = g_irepository_get_search_path(); + for (; paths != NULL; paths = paths->next) + g_message("Search path entry: %s\n", (const char*)paths->data); + + GITypelib *typelib = g_irepository_require(repository, "GIRepository", NULL, 0, &error); + if (error) + { + g_error("ERROR: %s\n", error->message); + return 1; + } + + GIBaseInfo *base_info = g_irepository_find_by_name(repository, "GIRepository", "get_minor_version"); + if (!base_info) + { + g_error("ERROR: %s\n", "Could not find GIRepository get_minor_version"); + return 1; + } + + GIArgument retval; + if (!g_function_info_invoke((GIFunctionInfo *)base_info, NULL, 0, NULL, 0, &retval, &error)) + { + g_error("ERROR: %s\n", error->message); + return 1; + } + + g_message("GI Repository minor version: %d", retval.v_uint); + + g_base_info_unref(base_info); + + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/vcpkg.json new file mode 100644 index 0000000..7a1c761 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gobject-introspection/vcpkg.json @@ -0,0 +1,54 @@ +{ + "name": "vcpkg-ci-gobject-introspection", + "version-string": "ci", + "description": "Port to force features of gobject-introspection within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + + "dependencies": [ + { + "name": "gobject-introspection", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "ports", + "platform": "!static & !(arm & windows)" + }, + { + "name": "run-test", + "platform": "!static & !(arm & windows)" + } + ], + "features": { + "ports": { + "description": "Test introspection in ports", + "supports": "!static", + "dependencies": [ + { + "name": "gobject-introspection", + "default-features": false, + "features": [ + "cairo" + ] + }, + { + "name": "harfbuzz", + "default-features": false, + "features": [ + "introspection" + ] + } + ] + }, + "run-test": { + "supports": "!static", + "description": "Run a test program." + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/vcpkg.json new file mode 100644 index 0000000..b987136 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gperftools/vcpkg.json @@ -0,0 +1,31 @@ +{ + "name": "vcpkg-ci-gperftools", + "version-string": "ci", + "description": "Validates gperftools", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + "gperftools", + { + "name": "gperftools", + "features": [ + "tools" + ], + "platform": "native" + }, + { + "name": "gperftools", + "features": [ + "libunwind" + ], + "platform": "linux, osx" + }, + { + "name": "gperftools", + "features": [ + "override" + ], + "platform": "windows & static & staticcrt & !mingw" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/portfile.cmake new file mode 100644 index 0000000..8e99ad6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/portfile.cmake @@ -0,0 +1,14 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" + OPTIONS_RELEASE + "-DGM_CONFIG=${CURRENT_INSTALLED_DIR}/tools/graphicsmagick/bin/GraphicsMagick-config" + OPTIONS_DEBUG + "-DGM_CONFIG=${CURRENT_INSTALLED_DIR}/tools/graphicsmagick/debug/bin/GraphicsMagick-config" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/CMakeLists.txt new file mode 100644 index 0000000..b3d3192 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/CMakeLists.txt @@ -0,0 +1,21 @@ +cmake_minimum_required(VERSION 3.30) +project(graphicsmagick-test C) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(graphicsmagick_pc GraphicsMagick REQUIRED IMPORTED_TARGET) + +add_executable(main-pkgconfig main.c) +target_link_libraries(main-pkgconfig PRIVATE PkgConfig::graphicsmagick_pc) + +find_program(GM_CONFIG NAMES GraphicsMagick-config REQUIRED) +if(NOT CMAKE_HOST_WIN32) + execute_process(COMMAND "${GM_CONFIG}" --cppflags --cflags OUTPUT_VARIABLE gm-config-cflags OUTPUT_STRIP_TRAILING_WHITESPACE) + separate_arguments(gm-config-cflags UNIX_COMMAND "${gm-config-cflags}") + execute_process(COMMAND "${GM_CONFIG}" --ldflags --libs OUTPUT_VARIABLE gm-config-libs OUTPUT_STRIP_TRAILING_WHITESPACE) + separate_arguments(gm-config-libs UNIX_COMMAND "${gm-config-libs}") + string(REGEX REPLACE "(^-|;-)framework;" "\\1framework " gm-config-libs "${gm-config-libs}") + + add_executable(main-gm-config main.c) + target_compile_options(main-gm-config PRIVATE ${gm-config-cflags}) + target_link_libraries(main-gm-config PRIVATE ${gm-config-libs}) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/main.c new file mode 100644 index 0000000..1d66d32 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/project/main.c @@ -0,0 +1,8 @@ +#include <magick/api.h> + +int main() +{ + InitializeMagick(NULL); + DestroyMagick(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/vcpkg.json new file mode 100644 index 0000000..6934e8a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-graphicsmagick/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-graphicsmagick", + "version-string": "ci", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "graphicsmagick", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/CMakeLists.txt new file mode 100644 index 0000000..a7dfd85 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.30) +project(gz-common-test) + +find_package(gz-common6 QUIET REQUIRED COMPONENTS av) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE gz-common6::gz-common6-av) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(gz-common_pc gz-common6-av REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.cpp) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::gz-common_pc) +if(MSVC) + target_compile_features(main-pkconfig PRIVATE cxx_std_17) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/main.cpp new file mode 100644 index 0000000..916dda8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/project/main.cpp @@ -0,0 +1,9 @@ +#include <gz/common/Console.hh> +#include <gz/common/VideoEncoder.hh> + +int main() +{ + gz::common::VideoEncoder v{}; + gzwarn << "Hello vcpkg" << std::endl; + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/vcpkg.json new file mode 100644 index 0000000..d08b106 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-gz-common/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-gz-common", + "version-string": "ci", + "description": "Port to force features of gz-common within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "gz-common", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/CMakeLists.txt new file mode 100644 index 0000000..4d03bc6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.30) +project(hello-imgui-test CXX) + +set(CMAKE_CXX_STANDARD 17) + +find_package(hello-imgui CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE + hello-imgui::hello_imgui +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/main.cpp new file mode 100644 index 0000000..12433aa --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/project/main.cpp @@ -0,0 +1,10 @@ +#include <hello_imgui/hello_imgui.h> + +int main() +{ + HelloImGui::Run([]() { + ImGui::Text("Hello vcpkg"); + ImGui::ShowDemoWindow(); + }); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/vcpkg.json new file mode 100644 index 0000000..a74ede4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-hello-imgui/vcpkg.json @@ -0,0 +1,77 @@ +{ + "name": "vcpkg-ci-hello-imgui", + "version-string": "ci", + "description": "Port to force features of hello-imgui within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "hello-imgui", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "hello-imgui", + "features": [ + "glfw-binding", + "opengl3-binding", + "test-engine" + ], + "platform": "linux" + }, + { + "$comment": "No platform backend available since removal of imgui[sdl2-binding]", + "name": "hello-imgui", + "features": [ + "opengl3-binding" + ], + "platform": "android" + }, + { + "name": "hello-imgui", + "features": [ + "glfw-binding", + "metal-binding" + ], + "platform": "ios | osx" + }, + { + "name": "hello-imgui", + "features": [ + "glfw-binding", + "opengl3-binding" + ], + "platform": "x64 & windows" + }, + { + "name": "hello-imgui", + "features": [ + "experimental-dx11-binding", + "glfw-binding" + ], + "platform": "x86 & windows" + }, + { + "name": "hello-imgui", + "features": [ + "experimental-vulkan-binding", + "glfw-binding", + "test-engine" + ], + "platform": "arm64 & windows" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-icu/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-icu/portfile.cmake new file mode 100644 index 0000000..cb50a44 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-icu/portfile.cmake @@ -0,0 +1,12 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" + "-DVCPKG_CHECK_CMAKE_BUILD_TYPE=${VCPKG_BUILD_TYPE}" + "-DVCPKG_CROSSCOMPILING=${VCPKG_CROSSCOMPILING}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/CMakeLists.txt new file mode 100644 index 0000000..fcd52b2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.16) +project(icu-test C CXX) + +include("${CMAKE_CURRENT_LIST_DIR}/test-functions.cmake") + +find_package(ICU MODULE COMPONENTS i18n REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE ICU::i18n) + + +find_package(PkgConfig REQUIRED) +pkg_check_modules(icu_pc icu-i18n REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::icu_pc) + +# Validate other components + +set(required_components data dt in io tu uc) +if(VCPKG_CROSSCOMPILING) + list(REMOVE_ITEM required_components tu) # comes with (host) tools +endif() +vcpkg_check_cmake_package_find(ICU MODULE REQUIRED COMPONENTS ${required_components}) +vcpkg_check_cmake_package_variables() +vcpkg_check_cmake_package_targets() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/main.c new file mode 100644 index 0000000..4054c74 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/main.c @@ -0,0 +1,9 @@ +#include "unicode/udat.h" + +int main() +{ + UErrorCode status = U_ZERO_ERROR; + UDateFormat* dateFormatter = udat_open(UDAT_NONE, UDAT_SHORT, NULL, NULL, -1, NULL, 0, &status); + udat_close(dateFormatter); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/test-functions.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/test-functions.cmake new file mode 100644 index 0000000..976e6a3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-icu/project/test-functions.cmake @@ -0,0 +1,163 @@ +set(VCPKG_CHECK_CMAKE_BUILD_TYPE "" CACHE STRING "Build type to be checked") + +set(Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN "" CACHE INTERNAL "Last loaded package name") + +# Call and trace find_package in distinct scope +function(z_vcpkg_check_cmake_package_trace_find) + set(CMAKE_FIND_DEBUG_MODE ON) + set(VCPKG_TRACE_FIND_PACKAGE ON) + find_package(${ARGN}) +endfunction() + +# Call and trace find_package, ensure that it called twice +macro(vcpkg_check_cmake_package_find package) + z_vcpkg_check_cmake_package_trace_find("${package}" ${ARGN}) + message(STATUS "Checking that find_package(${package} ...) can be called again") + find_package("${package}" ${ARGN} QUIET) + message(STATUS "Checking that find_package(${package} ...) can be called again - done") + set(Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN "${package}" CACHE INTERNAL "Last loaded package name") +endmacro() + +# Check that library variables match the debug/release build type. +# The variable names might be passed in explicitly or guessed from a prefix. +# If no args are given, the prefix is the name of the last package loaded +# by vcpkg_check_cmake_package_find(). +function(vcpkg_check_cmake_package_variables) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "PREFIX" "") + if(arg_PREFIX AND arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "'PREFIX value' must not be used together with other values.") + endif() + if(NOT arg_PREFIX AND NOT arg_UNPARSED_ARGUMENTS) + if(Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN) + set(arg_PREFIX "${Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN}") + else() + message(FATAL_ERROR "Unable to determine the prefix to be checked.") + endif() + endif() + + set(libraries_vars "${arg_UNPARSED_ARGUMENTS}") + if(libraries_vars STREQUAL "") + string(REGEX REPLACE "_\$" "" prefix "${arg_PREFIX}") + if(DEFINED "${prefix}_LIBRARIES") + set(libraries_vars "${prefix}_LIBRARIES") + elseif(DEFINED "${package}_LIBRARY") + set(libraries_vars "${prefix}_LIBRARY") + endif() + if(DEFINED "${prefix}_LIBRARY_DIR") + list(APPEND "libraries_vars" "${${prefix}_LIBRARY_DIR}") + endif() + if(DEFINED "${prefix}_LIBRARY_DIRS") + list(APPEND "libraries_vars" "${${prefix}_LIBRARY_DIRS}") + endif() + endif() + if(libraries_vars STREQUAL "") + message(FATAL_ERROR "Unable to determine the variables to be checked.") + endif() + + set(link_keywords debug general optimized) + foreach(var IN LISTS libraries_vars) + set(libraries "${${var}}") + message(STATUS "${var}: ${libraries}") + set(last_keyword "") + foreach(item IN LISTS libraries) + if(item IN_LIST link_keywords) + set(last_keyword "${item}") + continue() + endif() + string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/" starts_with_release) + string(FIND "${item}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/" starts_with_debug) + if(starts_with_release EQUAL "0") + if(last_keyword STREQUAL "optimized") + # okay + elseif(last_keyword STREQUAL "debug") + message(SEND_ERROR "Release lib for 'debug' keyword: ${item}") + elseif(CMAKE_BUILD_TYPE STREQUAL "Debug") + message(SEND_ERROR "Release lib for 'Debug' build: ${item}") + endif() + elseif(starts_with_debug EQUAL "0") + if(last_keyword STREQUAL "debug") + # okay + elseif(last_keyword STREQUAL "optimized") + message(SEND_ERROR "Debug lib for 'optimized' keyword: ${item}") + elseif(CMAKE_BUILD_TYPE STREQUAL "Release") + message(SEND_ERROR "Debug lib for 'Release' build: ${item}") + endif() + endif() + set(last_keyword "") + continue() + endforeach() + endforeach() +endfunction() + +# Check that imported target properties match the debug/release build type. +# The target names might be passed in explicitly or guessed from a namespace. +# If no args are given, the namespace is the name of the last package loaded +# by vcpkg_check_cmake_package_find(). +function(vcpkg_check_cmake_package_targets) + cmake_parse_arguments(PARSE_ARGV 0 arg "" "NAMESPACE" "") + if(arg_NAMESPACE AND arg_UNPARSED_ARGUMENTS) + message(FATAL_ERROR "'NAMESPACE value' must not be used together with other values.") + endif() + if(NOT arg_NAMESPACE AND NOT arg_UNPARSED_ARGUMENTS) + if(Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN) + set(arg_NAMESPACE "${Z_VCPKG_CHECK_CMAKE_PACKAGE_LAST_SEEN}") + else() + message(FATAL_ERROR "Unable to determine the namespace to be checked.") + endif() + endif() + + set(targets "${arg_UNPARSED_ARGUMENTS}") + if(targets STREQUAL "") + string(REGEX REPLACE "::::\$" "::" namespace "${arg_NAMESPACE}::") + get_directory_property(targets IMPORTED_TARGETS) + list(FILTER targets INCLUDE REGEX "^${namespace}") + endif() + if(targets STREQUAL "") + message(FATAL_ERROR "Unable to determine the targets to be checked.") + endif() + + foreach(target IN LISTS targets) + if(NOT TARGET "${target}") + message(FATAL_ERROR "No such target: ${target}") + endif() + get_target_property(type "${target}" TYPE) + message(STATUS "${target}: ${type}") + if(type MATCHES "LIBRARY" AND NOT type MATCHES "INTERFACE") + get_target_property(configurations "${target}" IMPORTED_CONFIGURATIONS) + message(STATUS " IMPORTED_CONFIGURATIONS: ${configurations}") + if(configurations) + string(TOLOWER "${configurations}" configurations) + if("release" IN_LIST configurations) + set(property IMPORTED_IMPLIB_RELEASE) + get_target_property(location "${target}" "${property}") + if(NOT location) + set(property IMPORTED_LOCATION_RELEASE) + get_target_property(location "${target}" "${property}") + endif() + message(STATUS " ${property}: ${location}") + string(FIND "${location}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib" index) + if (NOT index EQUAL "0") + message(SEND_ERROR "Release lib is in wrong location.") + endif() + elseif(NOT VCPKG_CHECK_CMAKE_BUILD_TYPE OR VCPKG_CHECK_CMAKE_BUILD_TYPE STREQUAL "release") + message(SEND_ERROR "Release configuration is missing.") + endif() + if("debug" IN_LIST configurations) + set(property IMPORTED_IMPLIB_DEBUG) + get_target_property(location "${target}" "${property}") + if(NOT location) + set(property IMPORTED_LOCATION_DEBUG) + get_target_property(location "${target}" "${property}") + endif() + message(STATUS " ${property}: ${location}") + string(FIND "${location}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib" index) + if (NOT index EQUAL "0") + message(SEND_ERROR "Debug lib is in wrong location.") + endif() + elseif(NOT VCPKG_CHECK_CMAKE_BUILD_TYPE OR VCPKG_CHECK_CMAKE_BUILD_TYPE STREQUAL "debug") + message(SEND_ERROR "Debug configuration is missing.") + endif() + endif() + endif() + endforeach() +endfunction() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-icu/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-icu/vcpkg.json new file mode 100644 index 0000000..7aef590 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-icu/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-icu", + "version-string": "ci", + "description": "Port to valdiate icu", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "icu", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-imgui/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-imgui/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-imgui/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-imgui/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-imgui/vcpkg.json new file mode 100644 index 0000000..316531b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-imgui/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "vcpkg-ci-imgui", + "version-date": "2024-05-17", + "description": "Force test-engine feature of imgui within vcpkg CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "imgui", + "features": [ + "test-engine" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-itk/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-itk/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-itk/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/CMakeLists.txt new file mode 100644 index 0000000..da9a7a4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.7) +project(itk-test) + +find_package(ITK CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE + $<TARGET_NAME:ITKFFT> +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/main.cpp new file mode 100644 index 0000000..ff248ec --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-itk/project/main.cpp @@ -0,0 +1,9 @@ +#include <itkImage.h> +#include <itkVnlForwardFFTImageFilter.h> + +int main() +{ + using FilterType = itk::VnlForwardFFTImageFilter<itk::Image<float, 2>>; + auto fftFilter = FilterType::New(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-itk/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-itk/vcpkg.json new file mode 100644 index 0000000..fd84799 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-itk/vcpkg.json @@ -0,0 +1,58 @@ +{ + "name": "vcpkg-ci-itk", + "version-string": "ci", + "description": "Validates itk; intentional permutation of features", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "itk", + "features": [ + "opencv" + ], + "platform": "arm64" + }, + { + "name": "itk", + "features": [ + "rtk", + "tools" + ], + "platform": "arm64 | x64" + }, + { + "name": "itk", + "features": [ + "fftw", + "opencl" + ], + "platform": "android | osx" + }, + { + "name": "itk", + "features": [ + "vtk" + ], + "platform": "osx | windows" + }, + { + "name": "itk", + "features": [ + "cuda" + ], + "platform": "x64 & windows & !staticcrt" + }, + { + "name": "itk", + "features": [ + "cufftw", + "opencl" + ], + "platform": "x64 & (linux | windows) & static" + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-juce/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-juce/portfile.cmake new file mode 100644 index 0000000..c735c7a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-juce/portfile.cmake @@ -0,0 +1,8 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DWITH_CURL=${VCPKG_TARGET_IS_LINUX}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/CMakeLists.txt new file mode 100644 index 0000000..259a88b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.29) +project(juce-test VERSION 1 LANGUAGES C CXX) + +set(CMAKE_CXX_STANDARD 11) + +option(WITH_CURL "Link curl") + +find_package(JUCE CONFIG REQUIRED) + +juce_add_console_app(core + PRODUCT_NAME "vcpkg-ci-juce" + NEEDS_CURL "${WITH_CURL}" +) +target_sources(core PRIVATE main.cpp) +target_link_libraries(core PRIVATE juce::juce_core) + +juce_add_console_app(everything + PRODUCT_NAME "vcpkg-ci-juce" + NEEDS_CURL "${WITH_CURL}" +) +target_sources(everything PRIVATE main.cpp) +file(GLOB all_modules RELATIVE "${JUCE_MODULES_DIR}" "${JUCE_MODULES_DIR}/*") +list(TRANSFORM all_modules PREPEND juce::) +target_link_libraries(everything PRIVATE ${all_modules}) +target_compile_definitions(everything PRIVATE JUCE_WEB_BROWSER=0) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/main.cpp new file mode 100644 index 0000000..d7f625d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-juce/project/main.cpp @@ -0,0 +1,7 @@ +#include <juce_core/juce_core.h> + +int main() +{ + juce::Logger::writeToLog("vcpkg"); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-juce/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-juce/vcpkg.json new file mode 100644 index 0000000..8033bb2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-juce/vcpkg.json @@ -0,0 +1,28 @@ +{ + "name": "vcpkg-ci-juce", + "version-string": "ci", + "description": "Validates juce", + "dependencies": [ + "juce", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "extras" + ], + "features": { + "extras": { + "description": "Install juce[extras]", + "dependencies": [ + { + "name": "juce", + "features": [ + "extras" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libaec/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/CMakeLists.txt new file mode 100644 index 0000000..a69ef63 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.30) +project(libaec-test C) + +find_package(libaec CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE libaec::aec) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/main.c new file mode 100644 index 0000000..22df70a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/project/main.c @@ -0,0 +1,28 @@ +#include <stdint.h> +#include <libaec.h> + +int main() +{ + int32_t source[] = { 1, 1, 1, 4}; + int source_length = 4; + + unsigned char dest[64]; + int dest_lenth = 64; + + struct aec_stream strm; + strm.bits_per_sample = 32; + strm.block_size = 16; + strm.rsi = 128; + strm.flags = AEC_DATA_SIGNED | AEC_DATA_PREPROCESS; + strm.next_in = (unsigned char *)source; + strm.avail_in = source_length * sizeof(int32_t); + strm.next_out = (unsigned char *)dest; + strm.avail_out = dest_lenth; + if (aec_encode_init(&strm) != AEC_OK) + return 1; + if (aec_encode(&strm, AEC_FLUSH) != AEC_OK) + return 1; + aec_encode_end(&strm); + + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libaec/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/vcpkg.json new file mode 100644 index 0000000..d5ccd61 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libaec/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-libaec", + "version-string": "ci", + "description": "Port to force features of libaec within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libaec", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libavif/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/CMakeLists.txt new file mode 100644 index 0000000..37e5786 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.30) +project(libavif-test C) + +find_package(libavif CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE + $<TARGET_NAME:avif> +) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libavif_pc libavif REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::libavif_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/main.c new file mode 100644 index 0000000..f305e9f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/project/main.c @@ -0,0 +1,10 @@ +#include <stdio.h> +#include <avif/avif.h> + +int main() +{ + char codecVersions[256]; + avifCodecVersions(codecVersions); + printf("Codec Versions: %s\n", codecVersions); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libavif/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/vcpkg.json new file mode 100644 index 0000000..7734f77 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libavif/vcpkg.json @@ -0,0 +1,34 @@ +{ + "name": "vcpkg-ci-libavif", + "version-string": "ci", + "description": "Port to force features of libavif within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libavif", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "libavif", + "features": [ + "aom", + "dav1d" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/cmake-project.diff b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/cmake-project.diff new file mode 100644 index 0000000..2d2302f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/cmake-project.diff @@ -0,0 +1,29 @@ +diff --git a/examples/streamer/CMakeLists.txt b/examples/streamer/CMakeLists.txt +index 1bdeb7c..9cf65dd 100644 +--- a/examples/streamer/CMakeLists.txt ++++ b/examples/streamer/CMakeLists.txt +@@ -2,6 +2,15 @@ cmake_minimum_required(VERSION 3.7) + if(POLICY CMP0079) + cmake_policy(SET CMP0079 NEW) + endif() ++project(vcpkg-ci) ++add_definitions(-DWIN32_LEAN_AND_MEAN) ++set(THREADS_PREFER_PTHREAD_FLAG ON) ++find_package(Threads REQUIRED) ++find_package(nlohmann_json CONFIG REQUIRED) ++find_package(LibDataChannel CONFIG REQUIRED) ++if(NOT TARGET LibDataChannel::LibDataChannel) ++ add_library(LibDataChannel::LibDataChannel ALIAS LibDataChannel::LibDataChannelStatic) ++endif() + + set(STREAMER_SOURCES + main.cpp +@@ -47,7 +56,7 @@ set_target_properties(streamer PROPERTIES + find_package(Threads REQUIRED) + target_link_libraries(streamer LibDataChannel::LibDataChannel Threads::Threads nlohmann_json::nlohmann_json) + +-if(MSVC) ++if(0) + add_custom_command(TARGET streamer POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "$<TARGET_FILE_DIR:datachannel>/datachannel.dll" diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/portfile.cmake new file mode 100644 index 0000000..1e6cc15 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/portfile.cmake @@ -0,0 +1,14 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO paullouisageneau/libdatachannel + REF v0.23.2 + SHA512 49e19e40874167ef505829841a8b944f8489cb7a15ff6e5a8d74c886c5ff28a32c2724871be2244c805dd6b0919878e06d31c43b27c8d242222adae8509e0d59 + HEAD_REF master + PATCHES + cmake-project.diff +) + +vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}/examples/streamer") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/vcpkg.json new file mode 100644 index 0000000..8d6056f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libdatachannel/vcpkg.json @@ -0,0 +1,19 @@ +{ + "name": "vcpkg-ci-libdatachannel", + "version-string": "ci", + "description": "Validates libdatachannel", + "dependencies": [ + { + "name": "libdatachannel", + "features": [ + "srtp", + "ws" + ] + }, + "nlohmann-json", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/CMakeLists.txt new file mode 100644 index 0000000..b067144 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.29) +project(libftdi1-test CXX) + +set(CMAKE_CXX_STANDARD 11) + +add_executable(main main.cpp) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libftdipp1 IMPORTED_TARGET REQUIRED libftdipp1) +target_link_libraries(main PRIVATE PkgConfig::libftdipp1) + +# subdir to scope side effects +add_subdirectory(cmake-usage) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/cmake-usage/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/cmake-usage/CMakeLists.txt new file mode 100644 index 0000000..2f1cca3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/cmake-usage/CMakeLists.txt @@ -0,0 +1,6 @@ +# not modern +find_package(LIBFTDI1 NAMES LibFTDI1 REQUIRED) +include("${LIBFTDI_USE_FILE}") + +add_executable(cmake-usage ../main.cpp) +target_link_libraries(cmake-usage PRIVATE ${LIBFTDIPP_LIBRARIES}) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/main.cpp new file mode 100644 index 0000000..48c64a5 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/project/main.cpp @@ -0,0 +1,7 @@ +#include "ftdi.hpp" + +int main() +{ + auto *context = new Ftdi::Context(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/vcpkg.json new file mode 100644 index 0000000..dcb905e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libftdi1/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-libftdi1", + "version-string": "ci", + "description": "Validates libftdi1", + "dependencies": [ + { + "name": "libftdi1", + "features": [ + "cpp" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/vcpkg.json new file mode 100644 index 0000000..f4c01aa --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgit2/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "vcpkg-ci-libgit2", + "version-string": "ci", + "description": "Validates libgit2 with ssh and tools.", + "dependencies": [ + { + "name": "libgit2", + "default-features": false, + "features": [ + "ssh", + "tools" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/CMakeLists.txt new file mode 100644 index 0000000..7e04f35 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.10) +project(libgwenhywfar-test C) + +find_package(PkgConfig REQUIRED) + +block() + pkg_check_modules(gwenhywfar IMPORTED_TARGET REQUIRED gwenhywfar) + + add_executable(libgwenhywfar_pkgconfig main.c) + target_link_libraries(libgwenhywfar_pkgconfig PkgConfig::gwenhywfar) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/main.c new file mode 100644 index 0000000..6a24a6a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/project/main.c @@ -0,0 +1,8 @@ +#include <gwenhywfar/gwenhywfar.h> /* based on gwenhywfar.pc */ + +int main() +{ + int result = GWEN_Init(); + GWEN_Fini(); + return result; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/vcpkg.json new file mode 100644 index 0000000..3f9f827 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libgwenhywfar/vcpkg.json @@ -0,0 +1,49 @@ +{ + "name": "vcpkg-ci-libgwenhywfar", + "version-string": "ci", + "description": "Validates libgwenhywfar", + "dependencies": [ + { + "name": "libgwenhywfar", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "openssl", + "platform": "!arm64" + }, + { + "name": "qt5", + "platform": "!(osx & static)" + } + ], + "features": { + "openssl": { + "description": "Use openssl", + "dependencies": [ + { + "name": "libgwenhywfar", + "features": [ + "openssl" + ] + } + ] + }, + "qt5": { + "description": "Install qt5 binding", + "dependencies": [ + { + "name": "libgwenhywfar", + "features": [ + "qt5" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libhat/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/portfile.cmake new file mode 100644 index 0000000..8a2079b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/CMakeLists.txt new file mode 100644 index 0000000..3b8ccd1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(libhat-test LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 20)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(libhat CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE libhat::libhat)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/main.cpp new file mode 100644 index 0000000..3ac6612 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/project/main.cpp @@ -0,0 +1,6 @@ +#include <libhat/signature.hpp>
+int main()
+{
+ auto sig = hat::parse_signature("01 02 03 04 05 06 07 08 09").value();
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libhat/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/vcpkg.json new file mode 100644 index 0000000..75328bb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libhat/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-libhat", + "version-string": "ci", + "description": "Validates libhat", + "dependencies": [ + "libhat", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libheif/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/CMakeLists.txt new file mode 100644 index 0000000..c2920c0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.30) +project(libheif-test C CXX) + +find_package(libheif CONFIG REQUIRED) + +add_executable(main main.c) +add_library(imported::heif ALIAS heif) +target_link_libraries(main PRIVATE imported::heif) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libheif_pc libheif REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::libheif_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/main.c new file mode 100644 index 0000000..122d9e3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/project/main.c @@ -0,0 +1,8 @@ +#include <libheif/heif.h> + +int main() +{ + heif_context* ctx = heif_context_alloc(); + heif_context_free(ctx); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libheif/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/vcpkg.json new file mode 100644 index 0000000..4bac465 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libheif/vcpkg.json @@ -0,0 +1,33 @@ +{ + "name": "vcpkg-ci-libheif", + "version-string": "ci", + "description": "Port to test libheif in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libheif", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "ci" + ], + "features": { + "ci": { + "description": "Feature depenencies. openjpeg is a plugin.", + "dependencies": [ + { + "name": "libheif", + "features": [ + "openjpeg" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libigl/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/portfile.cmake new file mode 100644 index 0000000..cf5bbb5 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/portfile.cmake @@ -0,0 +1,17 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO libigl/libigl + REF v2.6.0 + SHA512 7c6ae5b94020a01df5d6d0a358592293595d8d8bf04bf42e6acc09bcd6ed012071069373a71ed6f24ce878aa79447dd189b42bc8a3a70819ef05dccc60a2cf68 + HEAD_REF master +) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DSOURCE_PATH=${SOURCE_PATH}" + "-DFEATURES=${FEATURES}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/CMakeLists.txt new file mode 100644 index 0000000..e3b1851 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/CMakeLists.txt @@ -0,0 +1,47 @@ +cmake_minimum_required(VERSION 3.16) +project(libigl-test C CXX) + +set(CMAKE_CXX_STANDARD 11) + +add_definitions("-DTUTORIAL_SHARED_PATH=\"${SOURCE_PATH}/placeholder\"") + +find_package(libigl CONFIG REQUIRED) + +# Other than in the upstream build ("${SOURCE_PATH}/tutorial/CMakeLists.txt"), +# the imported targets use a different prefix, e.g. +# igl::glfw -> igl::igl_glfw +# igl_copyleft::cgal -> igl_copyleft::igl_copyleft_cgal + +add_executable(101_FileIO "${SOURCE_PATH}/tutorial/101_FileIO/main.cpp") +target_link_libraries(101_FileIO PRIVATE igl::igl_core) + +if("cgal" IN_LIST FEATURES) + add_executable(609_Boolean "${SOURCE_PATH}/tutorial/609_Boolean/main.cpp") + target_link_libraries(609_Boolean PRIVATE igl::igl_glfw igl_copyleft::igl_copyleft_cgal) +endif() + +if("embree" IN_LIST FEATURES) + add_executable(706_FacetOrientation "${SOURCE_PATH}/tutorial/706_FacetOrientation/main.cpp") + target_link_libraries(706_FacetOrientation PRIVATE igl::igl_glfw igl::igl_embree) +endif() + +if("glfw" IN_LIST FEATURES) + add_executable(102_DrawMesh "${SOURCE_PATH}/tutorial/102_DrawMesh/main.cpp") + target_link_libraries(102_DrawMesh PRIVATE igl::igl_glfw) + + add_executable(111_MatCap "${SOURCE_PATH}/tutorial/111_MatCap/main.cpp" "${CMAKE_CURRENT_LIST_DIR}/stb_image_implementation.c") + target_link_libraries(111_MatCap PRIVATE igl::igl_glfw igl::igl_stb) +endif() + +if("imgui" IN_LIST FEATURES) + add_executable(109_ImGuizmo "${SOURCE_PATH}/tutorial/109_ImGuizmo/main.cpp") + target_link_libraries(109_ImGuizmo PRIVATE igl::igl_imgui) + + add_executable(113_Shadows "${SOURCE_PATH}/tutorial/113_Shadows/main.cpp" "${CMAKE_CURRENT_LIST_DIR}/stb_image_implementation.c") + target_link_libraries(113_Shadows PRIVATE igl::igl_imgui igl::igl_stb) +endif() + +if("xml" IN_LIST FEATURES) + add_executable(601_Serialization "${SOURCE_PATH}/tutorial/601_Serialization/main.cpp") + target_link_libraries(601_Serialization PRIVATE igl::igl_xml) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/stb_image_implementation.c b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/stb_image_implementation.c new file mode 100644 index 0000000..9177288 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/project/stb_image_implementation.c @@ -0,0 +1,2 @@ +#define STB_IMAGE_IMPLEMENTATION +#include <stb_image.h> diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libigl/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/vcpkg.json new file mode 100644 index 0000000..d288886 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libigl/vcpkg.json @@ -0,0 +1,100 @@ +{ + "name": "vcpkg-ci-libigl", + "version-string": "ci", + "description": "Port to force features of libigl within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libigl", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "cgal", + "platform": "!android & !(x86 & windows)" + }, + { + "name": "embree", + "platform": "linux | osx | (windows & !uwp & !arm)" + }, + { + "name": "glfw", + "platform": "!android" + }, + { + "name": "imgui", + "platform": "!android" + }, + "xml" + ], + "features": { + "cgal": { + "description": "libigl[cgal]", + "dependencies": [ + { + "name": "libigl", + "default-features": false, + "features": [ + "cgal", + "glfw" + ] + } + ] + }, + "embree": { + "description": "libigl[embree]", + "dependencies": [ + { + "name": "libigl", + "default-features": false, + "features": [ + "embree", + "glfw" + ] + } + ] + }, + "glfw": { + "description": "libigl[glfw] and stb", + "dependencies": [ + { + "name": "libigl", + "default-features": false, + "features": [ + "glfw" + ] + } + ] + }, + "imgui": { + "description": "libigl[imgui] and stb", + "dependencies": [ + { + "name": "libigl", + "default-features": false, + "features": [ + "imgui" + ] + } + ] + }, + "xml": { + "description": "libigl[xml]", + "dependencies": [ + { + "name": "libigl", + "default-features": false, + "features": [ + "xml" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmem/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/CMakeLists.txt new file mode 100644 index 0000000..924854f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.25.1) +project(libmem-test CXX) +set(CMAKE_CXX_STANDARD 17)
+find_package(libmem CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE libmem::libmem)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/main.cpp new file mode 100644 index 0000000..3590741 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/project/main.cpp @@ -0,0 +1,7 @@ +#include <libmem/libmem.h>
+int main()
+{
+ lm_module_t moduled;
+ LM_FindModule("user32.dll", &moduled);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmem/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/vcpkg.json new file mode 100644 index 0000000..d31a99d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmem/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-libmem", + "version-string": "ci", + "description": "Validates libmem", + "dependencies": [ + "libmem", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/CMakeLists.txt new file mode 100644 index 0000000..b4a85a0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.30) +project(libmodbus-test C) + +find_package(libmodbus CONFIG REQUIRED) +add_library(imported::modbus ALIAS modbus) + +add_executable(main main.c) +target_link_libraries(main PRIVATE imported::modbus) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libmodbus_pc libmodbus REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::libmodbus_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/main.c new file mode 100644 index 0000000..aaffb06 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/project/main.c @@ -0,0 +1,12 @@ +#include <stdio.h> +#include <modbus.h> + +int main() +{ + modbus_t *ctx = modbus_new_rtu("/dev/ttyUSB0", 115200, 'N', 8, 1); + if (ctx == NULL) { + fprintf(stderr, "Unable to create the libmodbus context\n"); + return -1; + } + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/vcpkg.json new file mode 100644 index 0000000..293ffea --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmodbus/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-libmodbus", + "version-string": "ci", + "description": "Port to validate libmodbus in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libmodbus", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/portfile.cmake new file mode 100644 index 0000000..e081d5a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/portfile.cmake @@ -0,0 +1,16 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO ArtifexSoftware/mupdf + REF 1.26.10 + SHA512 c0f802fd2b181587df1748a8db7163bbcd3951b943d1321afcff56fccb515dfe99061288bc691323d0854305a1d4205c99457954b10439adb122975429cbce72 + HEAD_REF master +) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DSOURCE_PATH=${SOURCE_PATH}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/project/CMakeLists.txt new file mode 100644 index 0000000..3173088 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.10) +project(libmupdf-test C CXX) + +find_package(unofficial-libmupdf REQUIRED) + +add_executable(example "${SOURCE_PATH}/docs/examples/example.c") +target_link_libraries(example PRIVATE unofficial::libmupdf::libmupdf) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/vcpkg.json new file mode 100644 index 0000000..95715de --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libmupdf/vcpkg.json @@ -0,0 +1,13 @@ +{ + "name": "vcpkg-ci-libmupdf", + "version-string": "ci", + "description": "Port to validate libmupdf within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "dependencies": [ + "libmupdf", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/CMakeLists.txt new file mode 100644 index 0000000..ac01649 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.30) +project(libpqxx-test CXX) + +set(CMAKE_CXX_STANDARD 17) + +find_package(libpqxx CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE libpqxx::pqxx) + +if(NOT (WIN32 AND NOT MINGW)) + find_package(PkgConfig REQUIRED) + pkg_check_modules(libpqxx IMPORTED_TARGET REQUIRED libpqxx) + + add_executable(main-pkgconfig main.cpp) + target_link_libraries(main-pkgconfig PRIVATE PkgConfig::libpqxx) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/main.cpp new file mode 100644 index 0000000..ba1f273 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/project/main.cpp @@ -0,0 +1,8 @@ +#include <pqxx/pqxx> + +int main() +{ + pqxx::connection cx{"postgresql://vcpkg@localhost/tests"}; + pqxx::work tx{cx}; + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/vcpkg.json new file mode 100644 index 0000000..15437cc --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libpqxx/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-libpqxx", + "version-string": "ci", + "description": "Validates libpqxx", + "dependencies": [ + "libpqxx", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/CMakeLists.txt new file mode 100644 index 0000000..fa6d240 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.30) +project(libremidi-test CXX) + +find_package(libremidi CONFIG REQUIRED) +add_library(imported::libremidi ALIAS libremidi) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE imported::libremidi) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/main.cpp new file mode 100644 index 0000000..4820cab --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/project/main.cpp @@ -0,0 +1,12 @@ +#include <libremidi/libremidi.hpp> +#include <libremidi/backends.hpp> +#include <iostream> + +int main() +{ + std::cout << "Default midi2 API: " << libremidi::get_api_display_name(libremidi::midi2::default_api()) << std::endl; + libremidi::midi_any::for_all_backends([](auto& backend) { + std::cout << "- " << backend.display_name << std::endl; + }); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/vcpkg.json new file mode 100644 index 0000000..add089f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libremidi/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-libremidi", + "version-string": "ci", + "description": "Validates libremidi", + "dependencies": [ + "libremidi", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libressl/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/CMakeLists.txt new file mode 100644 index 0000000..33f6bad --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.7) +project(libressl-test C) + +find_package(PkgConfig REQUIRED) + +# libressl provides cmake config +find_package(LibreSSL CONFIG REQUIRED) +message(STATUS "LibreSSL CONFIG: ${LibreSSL_DIR}") +string(FIND "${LibreSSL_DIR}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" index) +if(NOT index STREQUAL "0") + message(SEND_ERROR "LibreSSL CONFIG is not from vcpkg.") +endif() + +pkg_check_modules(libtls IMPORTED_TARGET REQUIRED libtls) +if(NOT libtls_VERSION STREQUAL LibreSSL_VERSION) + message(SEND_ERROR "Unexpected libtls_VERSION '${libtls_VERSION}' (expected: '${LibreSSL_VERSION}')") +endif() + +# libressl promises openssl compatibility +# NB: The port doesn't provide a wrapper, so there is no support +# for multi-config and for transitive usage requirements. +find_package(OpenSSL MODULE REQUIRED) +foreach(target IN ITEMS OpenSSL::SSL OpenSSL::Crypto) + set(location_found FALSE) + foreach(property IN ITEMS IMPORTED_LOCATION IMPORTED_LOCATION_DEBUG IMPORTED_LOCATION_RELEASE) + get_target_property(location ${target} ${property}) + if(NOT location) + continue() + endif() + set(location_found TRUE) + message(STATUS "${target} ${property}: ${location}") + string(FIND "${location}" "${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}" index) + if(NOT index STREQUAL "0") + message(SEND_ERROR "${target} ${property} is not from vcpkg.") + endif() + endforeach() + if(NOT location_found) + message(SEND_ERROR "No location for ${target} binary") + endif() +endforeach() +if(NOT OPENSSL_VERSION STREQUAL "2.0.0") + message(SEND_ERROR "Unexpected OPENSSL_VERSION '${OPENSSL_VERSION}' (expected: '2.0.0')") +endif() + +pkg_check_modules(openssl IMPORTED_TARGET REQUIRED openssl) +# NB: openssl.pc carries libressl version (3.x), but doesn't provide 3.x OpenSSL API. +if(NOT openssl_VERSION STREQUAL LibreSSL_VERSION) + message(SEND_ERROR "Unexpected openssl_VERSION '${openssl_VERSION}' (expected: '${LibreSSL_VERSION}')") +endif() + +# compile and link tests + +add_executable(openssl_cmake openssl.c) +target_link_libraries(openssl_cmake OpenSSL::SSL) + +add_executable(openssl_pkgconfig openssl.c) +target_link_libraries(openssl_pkgconfig PkgConfig::openssl) + +add_executable(libressl_cmake libressl.c) +target_link_libraries(libressl_cmake LibreSSL::TLS) + +add_executable(libressl_pkgconfig libressl.c) +target_link_libraries(libressl_pkgconfig PkgConfig::libtls) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/libressl.c b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/libressl.c new file mode 100644 index 0000000..2814d3c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/libressl.c @@ -0,0 +1,6 @@ +#include <tls.h> + +int main() +{ + return tls_init(); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/openssl.c b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/openssl.c new file mode 100644 index 0000000..880991a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/project/openssl.c @@ -0,0 +1,10 @@ +#include <openssl/ssl.h> + +#if OPENSSL_VERSION_NUMBER != 0x20000000L +# error Unexpected version +#endif + +int main() +{ + return SSL_library_init(); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libressl/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/vcpkg.json new file mode 100644 index 0000000..3b04b3e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libressl/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-libressl", + "version-string": "ci", + "description": "Validates libressl", + "dependencies": [ + "libressl", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/CMakeLists.txt new file mode 100644 index 0000000..ad46b40 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.30) +project(libsrtp-test C) + +find_package(libSRTP CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE libSRTP::srtp2) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(libsrtp_pc libsrtp2 REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::libsrtp_pc) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/main.c new file mode 100644 index 0000000..2756986 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/project/main.c @@ -0,0 +1,8 @@ +#include <stdio.h> +#include <srtp2/srtp.h> + +int main() +{ + printf("libsrtp versions: %s\n", srtp_get_version_string()); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/vcpkg.json new file mode 100644 index 0000000..2ac5383 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-libsrtp/vcpkg.json @@ -0,0 +1,33 @@ +{ + "name": "vcpkg-ci-libsrtp", + "version-string": "ci", + "description": "Port to force features of libsrtp within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "libsrtp", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "libsrtp", + "features": [ + "openssl" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-lief/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-lief/portfile.cmake new file mode 100644 index 0000000..62422ca --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-lief/portfile.cmake @@ -0,0 +1,7 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+)
+
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/CMakeLists.txt new file mode 100644 index 0000000..9c994ed --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.24)
+
+project(vcpkg-ci-lief LANGUAGES C CXX)
+
+set(CMAKE_CXX_STANDARD 14)
+
+find_package(LIEF CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE LIEF::LIEF)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/main.cpp new file mode 100644 index 0000000..752dbe1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-lief/project/main.cpp @@ -0,0 +1,11 @@ +#include <iostream>
+#include <LIEF/LIEF.hpp>
+#include <LIEF/version.h>
+
+int main()
+{
+ // Outputs a string representation of the PUBLIC access flag (index 1)
+ std::cout << "access flags public = " << LIEF::DEX::to_string(LIEF::DEX::access_flags_list[1]) << std::endl;
+ std::cout << "Version = " << LIEF_VERSION << std::endl;
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-lief/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-lief/vcpkg.json new file mode 100644 index 0000000..848008e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-lief/vcpkg.json @@ -0,0 +1,27 @@ +{
+ "name": "vcpkg-ci-lief",
+ "version-string": "ci",
+ "description": "Testing packages which provide lief",
+ "license": null,
+ "dependencies": [
+ {
+ "name": "lief",
+ "features": [
+ "art",
+ "c-api",
+ "dex",
+ "enable-json",
+ "extra-warnings",
+ "logging",
+ "logging-debug",
+ "oat",
+ "use-ccache",
+ "vdex"
+ ]
+ },
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ]
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/portfile.cmake new file mode 100644 index 0000000..0122f05 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/portfile.cmake @@ -0,0 +1,9 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) +set(ENV{PKG_CONFIG} "${PKGCONFIG}") + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/CMakeLists.txt new file mode 100644 index 0000000..a3aa216 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/CMakeLists.txt @@ -0,0 +1,24 @@ +cmake_minimum_required(VERSION 3.16) +project(llama-cpp-test) + +find_package(llama CONFIG REQUIRED) + +add_executable(test-cmake main.cxx) +add_library(imported::llama ALIAS llama) +target_link_libraries(test-cmake PRIVATE imported::llama) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(llama-cpp llama REQUIRED IMPORTED_TARGET) + +add_executable(test-pkconfig main.cxx) +target_link_libraries(test-pkconfig PRIVATE PkgConfig::llama-cpp) + +# Verify that ggml::ggml-vulkan can be used with apps +# which instantiate VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE. +if(TARGET ggml::ggml-vulkan) + find_package(Vulkan REQUIRED) + target_link_libraries(test-cmake PRIVATE Vulkan::Vulkan) + target_compile_definitions(test-cmake PRIVATE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1) + target_link_libraries(test-pkconfig PRIVATE Vulkan::Vulkan) + target_compile_definitions(test-pkconfig PRIVATE VULKAN_HPP_DISPATCH_LOADER_DYNAMIC=1) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/main.cxx b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/main.cxx new file mode 100644 index 0000000..f407142 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/project/main.cxx @@ -0,0 +1,15 @@ +#include <llama.h> + +// Verify that ggml::ggml-vulkan can be used with apps which +// instantiate VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE. +#if defined(VULKAN_HPP_DISPATCH_LOADER_DYNAMIC) && VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 +#include <vulkan/vulkan.hpp> +VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE +#endif + +int main() +{ + auto context_params = llama_context_default_params(); + ggml_backend_load_all(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/vcpkg.json new file mode 100644 index 0000000..4a46322 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llama-cpp/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-llama-cpp", + "version-string": "ci", + "description": "Port to validate llama-cpp", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "llama-cpp", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llvm/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-llvm/portfile.cmake new file mode 100644 index 0000000..0015715 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llvm/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-llvm/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-llvm/vcpkg.json new file mode 100644 index 0000000..ec09695 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-llvm/vcpkg.json @@ -0,0 +1,48 @@ +{ + "name": "vcpkg-ci-llvm", + "version-string": "0", + "description": "LLVM features testing within CI.", + "license": null, + "supports": "!uwp & !(arm & windows)", + "dependencies": [ + { + "name": "llvm", + "default-features": false, + "features": [ + "clang", + "compiler-rt", + "default-targets", + "enable-abi-breaking-checks", + "enable-bindings", + "enable-eh", + "enable-rtti", + "enable-terminfo", + "enable-zlib", + "lld", + "lldb", + "tools" + ] + }, + { + "$comment": "Platform restriction due to CI artifact upload quirks; libc", + "name": "llvm", + "default-features": false, + "features": [ + "libc" + ], + "platform": "linux" + }, + { + "$comment": "Platform restriction due to CI artifact upload quirks; features which need utils", + "name": "llvm", + "default-features": false, + "features": [ + "bolt", + "openmp", + "polly", + "utils" + ], + "platform": "!static & !x86" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/portfile.cmake new file mode 100644 index 0000000..8a2079b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/CMakeLists.txt new file mode 100644 index 0000000..79c30f2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(mapbox-variant-test LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 11)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(unofficial-mapbox-variant CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE unofficial::mapbox-variant::variant)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/main.cpp new file mode 100644 index 0000000..1f59c1a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/project/main.cpp @@ -0,0 +1,17 @@ +#include <mapbox/variant.hpp>
+#include <stdexcept>
+struct check
+{
+ template <typename T>
+ void operator()(T const& val) const
+ {
+ if (val != 0) throw std::runtime_error("invalid");
+ }
+};
+int main()
+{
+ typedef mapbox::util::variant<bool, int, double> variant_type;
+ variant_type v(0);
+ mapbox::util::apply_visitor(check(), v);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/vcpkg.json new file mode 100644 index 0000000..3cdcb61 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mapbox-variant/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-mapbox-variant", + "version-string": "ci", + "description": "Validates mapbox-variant", + "dependencies": [ + "mapbox-variant", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/vcpkg.json new file mode 100644 index 0000000..a7976a1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mathgl/vcpkg.json @@ -0,0 +1,26 @@ +{ + "name": "vcpkg-ci-mathgl", + "version-date": "2022-12-28", + "description": "Ensures that the vcpkg CI build of mathgl tests all features and examples", + "license": "MIT", + "dependencies": [ + { + "name": "mathgl", + "features": [ + "arma", + "examples", + "fltk", + "gif", + "glut", + "gsl", + "hdf5", + "jpeg", + "opengl", + "png", + "qt5", + "wx", + "zlib" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/vcpkg.json new file mode 100644 index 0000000..9ad7fbc --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mdl-sdk/vcpkg.json @@ -0,0 +1,20 @@ +{ + "name": "vcpkg-ci-mdl-sdk", + "version-string": "ci", + "description": "Port to force features of certain ports within CI", + "license": "BSD-3-Clause", + "dependencies": [ + { + "name": "mdl-sdk", + "default-features": false, + "features": [ + "dds", + "openimageio" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/build-type.diff b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/build-type.diff new file mode 100644 index 0000000..7886576 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/build-type.diff @@ -0,0 +1,40 @@ +diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt +index c5fff1a..03a86ca 100644 +--- a/test/CMakeLists.txt ++++ b/test/CMakeLists.txt +@@ -20,6 +20,7 @@ find_package(mimalloc 2.2 CONFIG REQUIRED) + message(STATUS "Found mimalloc installed at: ${MIMALLOC_LIBRARY_DIR} (${MIMALLOC_VERSION_DIR})") + + ++if(BUILD_SHARED_LIBS) + # link with a dynamic shared library + # use `LD_PRELOAD` to actually override malloc/free at runtime with mimalloc + add_executable(dynamic-override main-override.c) +@@ -27,15 +28,19 @@ target_link_libraries(dynamic-override PUBLIC mimalloc) + + add_executable(dynamic-override-cxx main-override.cpp) + target_link_libraries(dynamic-override-cxx PUBLIC mimalloc) ++endif() + + ++if(0) + # overriding with a static object file works reliable as the symbols in the + # object file have priority over those in library files + add_executable(static-override-obj main-override.c ${MIMALLOC_OBJECT_DIR}/mimalloc${CMAKE_C_OUTPUT_EXTENSION}) + target_include_directories(static-override-obj PUBLIC ${MIMALLOC_INCLUDE_DIR}) + target_link_libraries(static-override-obj PUBLIC mimalloc-static) ++endif() + + ++if(NOT BUILD_SHARED_LIBS AND NOT WIN32) + # overriding with a static library works too if using the `mimalloc-override.h` + # header to redefine malloc/free. (the library already overrides new/delete) + add_executable(static-override-static main-override-static.c) +@@ -49,6 +54,7 @@ target_link_libraries(static-override PUBLIC mimalloc-static) + + add_executable(static-override-cxx main-override.cpp) + target_link_libraries(static-override-cxx PUBLIC mimalloc-static) ++endif() + + + ## test memory errors diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/portfile.cmake new file mode 100644 index 0000000..8a46d4c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/portfile.cmake @@ -0,0 +1,40 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO microsoft/mimalloc + REF "v${VERSION}" + SHA512 55262050f63868e3029cd929a74d312dc0f34b606534b1d0b3735eecc8eed68aae97523a50228b4ac4044e1e03192f2909440e3a27607e2d364607ac0bda828f + HEAD_REF master + PATCHES + build-type.diff +) +# Ensure that the test uses the installed mimalloc only +file(REMOVE_RECURSE + "${SOURCE_PATH}/bin" + "${SOURCE_PATH}/include" + "${SOURCE_PATH}/src" +) + +vcpkg_cmake_configure( + SOURCE_PATH "${SOURCE_PATH}/test" + OPTIONS + "-DCMAKE_PROJECT_INCLUDE=${CURRENT_PORT_DIR}/vcpkg-tests.cmake" + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) + +set(ENV{MIMALLOC_VERBOSE} 1) +set(ENV{MIMALLOC_SHOW_ERRORS} 1) +set(ENV{MIMALLOC_DISABLE_REDIRECT} 1) + +vcpkg_cmake_install(ADD_BIN_TO_PATH) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic" OR NOT VCPKG_TARGET_IS_WINDOWS) + vcpkg_copy_tools(TOOL_NAMES pkgconfig-override-cxx AUTO_CLEAN) +endif() + +file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug") + +vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE") diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg-tests.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg-tests.cmake new file mode 100644 index 0000000..659cb7d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg-tests.cmake @@ -0,0 +1,59 @@ +macro(deferred_tests) + +find_package(PkgConfig REQUIRED) + +# Legacy variables + +message(STATUS "MIMALLOC_INCLUDE_DIR: ${MIMALLOC_INCLUDE_DIR}") +message(STATUS "MIMALLOC_LIBRARY_DIR: ${MIMALLOC_LIBRARY_DIR}") +find_file(mimalloc_h NAMES mimalloc.h PATHS "${MIMALLOC_INCLUDE_DIR}" NO_DEFAULT_PATH REQUIRED) +set(names + mimalloc + mimalloc-secure + mimalloc-static + mimalloc-static-secure + mimalloc-debug + mimalloc-secure-debug + mimalloc-static-debug + mimalloc-static-secure-debug +) +find_library(mimalloc_lib NAMES ${names} PATHS "${MIMALLOC_LIBRARY_DIR}" NO_DEFAULT_PATH REQUIRED) + +# pkgconfig + +pkg_check_modules(PC_MIMALLOC mimalloc IMPORTED_TARGET REQUIRED) + +add_executable(pkgconfig-override $<IF:$<BOOL:${BUILD_SHARED_LIBS}>,main-override.c,main-override-static.c>) +target_link_libraries(pkgconfig-override PRIVATE PkgConfig::PC_MIMALLOC) + +if(BUILD_SHARED_LIBS OR NOT WIN32) + add_executable(pkgconfig-override-cxx main-override.cpp) + target_link_libraries(pkgconfig-override-cxx PRIVATE PkgConfig::PC_MIMALLOC) +endif() + +# Runtime + +if(NOT CMAKE_CROSSCOMPILING) + if(BUILD_SHARED_LIBS) + add_custom_target(run-dynamic-override ALL COMMAND $<TARGET_NAME:dynamic-override>) + add_custom_target(run-dynamic-override-cxx ALL COMMAND $<TARGET_NAME:dynamic-override-cxx>) + elseif(NOT WIN32) + add_custom_target(run-static-override ALL COMMAND $<TARGET_NAME:static-override>) + add_custom_target(run-static-override-cxx ALL COMMAND $<TARGET_NAME:static-override-cxx>) + endif() + if(TARGET pkgconfig-override-cxx) + add_custom_target(run-pkgconfig-override-cxx ALL COMMAND $<TARGET_NAME:pkgconfig-override-cxx>) + endif() +endif() + +# Deployment + +if(TARGET pkgconfig-override-cxx) + install(TARGETS pkgconfig-override-cxx) +else() + install(CODE [[ # placeholder # ]]) +endif() + +endmacro() + +cmake_language(DEFER CALL deferred_tests) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg.json new file mode 100644 index 0000000..9c453dd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mimalloc/vcpkg.json @@ -0,0 +1,33 @@ +{ + "name": "vcpkg-ci-mimalloc", + "version": "2.2.3", + "description": "Validates mimalloc", + "dependencies": [ + "mimalloc", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "features": { + "ci": { + "description": "Test feature permutation", + "dependencies": [ + { + "name": "mimalloc", + "features": [ + "override" + ], + "platform": "native & !(windows & static)" + }, + { + "name": "mimalloc", + "features": [ + "secure" + ], + "platform": "arm64 & static" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-minc/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-minc/portfile.cmake new file mode 100644 index 0000000..d1ab44a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-minc/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/CMakeLists.txt new file mode 100644 index 0000000..9bf614b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.30) +project(minc-test C CXX) + +find_package(LIBMINC CONFIG REQUIRED) + +add_executable(main main.c) +target_include_directories(main PRIVATE ${LIBMINC_INCLUDE_DIRS}) +target_link_directories(main PRIVATE ${LIBMINC_LIBRARY_DIRS}) +target_link_libraries(main PRIVATE ${LIBMINC_LIBRARIES}) + +if(NOT EXISTS "${LIBMINC_USE_FILE}") + message(SEND_ERROR "No such LIBMINC_USE_FILE: ${LIBMINC_USE_FILE}") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/main.c new file mode 100644 index 0000000..272158f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-minc/project/main.c @@ -0,0 +1,16 @@ +#include <stdio.h> +#include <minc2.h> + +int main() +{ + int result; + mihandle_t hvol; + + result = miopen_volume("/tmp/test.mnc", MI2_OPEN_READ, &hvol); + if (result != MI_NOERROR) { + fprintf(stderr, "Error opening the input file.\n"); + } + + miclose_volume(hvol); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-minc/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-minc/vcpkg.json new file mode 100644 index 0000000..c53f777 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-minc/vcpkg.json @@ -0,0 +1,34 @@ +{ + "name": "vcpkg-ci-minc", + "version-string": "ci", + "description": "Port to force features of minc within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "minc", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "minc", + "features": [ + "minc1" + ], + "platform": "native" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/portfile.cmake new file mode 100644 index 0000000..165195b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/portfile.cmake @@ -0,0 +1,10 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/CMakeLists.txt new file mode 100644 index 0000000..0008a44 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.30) + +project(vcpkg-ci-mpg123 C) + +find_package(mpg123 REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE MPG123::libmpg123) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(MPG123_PC REQUIRED IMPORTED_TARGET libmpg123) + +add_executable(main-pc main.c) +target_link_libraries(main-pc PRIVATE PkgConfig::MPG123_PC) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/main.c new file mode 100644 index 0000000..4ae5af4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/project/main.c @@ -0,0 +1,11 @@ +#include <mpg123.h> + +int main() +{ + mpg123_handle *m = mpg123_new(NULL, NULL); + mpg123_open(m, "vcpkg"); + mpg123_scan(m); + mpg123_close(m); + mpg123_delete(m); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/vcpkg.json new file mode 100644 index 0000000..44a9a09 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mpg123/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-mpg123", + "version-string": "ci", + "description": "Validates mpg123", + "dependencies": [ + "mpg123", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msh3/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/CMakeLists.txt new file mode 100644 index 0000000..1455618 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/CMakeLists.txt @@ -0,0 +1,22 @@ +cmake_minimum_required(VERSION 3.10) +project(msh3-test C) + +block() + set(CMAKE_DISABLE_FIND_PACKAGE_PkgConfig 1) + + find_package(msh3 CONFIG REQUIRED) + if(NOT TARGET msh3) + message(SEND_ERROR "No target 'msh3'") + endif() + + add_executable(msh3_cmake main.c) + target_link_libraries(msh3_cmake msh3) +endblock() + +block() + find_package(PkgConfig REQUIRED) + pkg_check_modules(libmsh3 IMPORTED_TARGET REQUIRED libmsh3) + + add_executable(msh3_pkgconfig main.c) + target_link_libraries(msh3_pkgconfig PkgConfig::libmsh3) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/main.c new file mode 100644 index 0000000..e55b40d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/project/main.c @@ -0,0 +1,8 @@ +#include <msh3.h> + +int main() +{ + MSH3_API* api = MsH3ApiOpen(); + if (api) + MsH3ApiClose(api); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msh3/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/vcpkg.json new file mode 100644 index 0000000..330016d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msh3/vcpkg.json @@ -0,0 +1,19 @@ +{ + "name": "vcpkg-ci-msh3", + "version-string": "ci", + "description": "Validates msh3", + "dependencies": [ + "msh3", + { + "name": "msquic", + "features": [ + "0-rtt" + ], + "platform": "windows & !static" + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msys2/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-msys2/portfile.cmake new file mode 100644 index 0000000..fe2753e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msys2/portfile.cmake @@ -0,0 +1,364 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +set(msys_repo_url "https://mirror.msys2.org/msys/x86_64") +set(mingw64_repo_url "https://mirror.msys2.org/mingw/mingw64") +set(mingw32_repo_url "https://mirror.msys2.org/mingw/mingw32") +set(clangarm64_repo_url "https://mirror.msys2.org/mingw/clangarm64") + +# Ignore these updates (e.g. for known problems) +vcpkg_list(SET ignored_updates + https://mirror.msys2.org/mingw/mingw64/mingw-w64-x86_64-ca-certificates-20211016-3-any.pkg.tar.zst +) + +# Known removals that shall not be reported as errors +# (Packages to be removed from vcpkg scripts ASAP.) +vcpkg_list(SET known_delisted + libcrypt +) + +# Ignore these dependencies (e.g. interactive or effectively optional) +vcpkg_list(SET ignored_dependencies + autoconf2.13 autoconf2.69 autoconf2.71 + automake1.11 automake1.12 automake1.13 automake1.14 automake1.15 + db + gdbm + info + less + libiconv-devel + libltdl + mingw-w64-x86_64-tzdata +) + +# Ignore these provides (e.g. effectively optional) +vcpkg_list(SET ignored_provides + gnome-common + perl-Archive-Tar perl-Attribute-Handlers perl-AutoLoader perl-CPAN-Meta-Requirements perl-CPAN-Meta-YAML perl-CPAN-Meta perl-CPAN perl-Carp perl-Compress-Raw-Bzip2 perl-Compress-Raw-Zlib perl-Config-Perl-V perl-DB_File perl-Data-Dumper perl-Devel-PPPort perl-Devel-SelfStubber perl-Digest-MD5 perl-Digest-SHA perl-Digest perl-Dumpvalue perl-Encode perl-Env perl-Exporter perl-ExtUtils-CBuilder perl-ExtUtils-Constant perl-ExtUtils-Install perl-ExtUtils-MakeMaker perl-ExtUtils-Manifest perl-ExtUtils-PL2Bat perl-ExtUtils-ParseXS perl-File-Fetch perl-File-Path perl-File-Temp perl-Filter-Simple perl-Filter-Util-Call perl-FindBin perl-Getopt-Long perl-HTTP-Tiny perl-I18N-Collate perl-I18N-LangTags perl-IO-Compress perl-IO-Socket-IP perl-IO-Zlib perl-IO perl-IPC-Cmd perl-IPC-SysV perl-JSON-PP perl-Locale-Maketext-Simple perl-Locale-Maketext perl-MIME-Base64 perl-Math-BigInt-FastCalc perl-Math-BigInt perl-Math-BigRat perl-Math-Complex perl-Memoize perl-Module-CoreList perl-Module-Load-Conditional perl-Module-Load perl-Module-Loaded perl-Module-Metadata perl-NEXT perl-Net-Ping perl-Params-Check perl-PathTools perl-Perl-OSType perl-PerlIO-via-QuotedPrint perl-Pod-Checker perl-Pod-Escapes perl-Pod-Perldoc perl-Pod-Simple perl-Pod-Usage perl-Safe perl-Scalar-List-Utils perl-Search-Dict perl-SelfLoader perl-Socket perl-Storable perl-Sys-Syslog perl-Term-ANSIColor perl-Term-Cap perl-Term-Complete perl-Term-ReadLine perl-Test-Harness perl-Test-Simple perl-Test perl-Text-Abbrev perl-Text-Balanced perl-Text-ParseWords perl-Text-Tabs perl-Thread-Queue perl-Thread-Semaphore perl-Tie-File perl-Tie-RefHash perl-Time-HiRes perl-Time-Local perl-Time-Piece perl-Unicode-Collate perl-Unicode-Normalize perl-Win32 perl-Win32API-File perl-XSLoader perl-autodie perl-autouse perl-base perl-bignum perl-constant perl-encoding-warnings perl-experimental perl-if perl-lib perl-libnet perl-parent perl-perlfaq perl-podlators perl-threads-shared perl-threads perl-version +) + + +string(TIMESTAMP now "%s" UTC) + +function(age_in_days out_var timestamp) + set(age "") + if(timestamp) + math(EXPR age "(${now} - ${timestamp}) / 3600 / 24") + endif() + set(${out_var} "${age}" PARENT_SCOPE) +endfunction() + +function(pretty_age out_var age_in_days) + if(age_in_days STREQUAL "") + set(${out_var} "(timestamp unknown)" PARENT_SCOPE) + else() + set(${out_var} "(${age_in_days} days ago)" PARENT_SCOPE) + endif() +endfunction() + +function(get_vcpkg_builddate out_var name) + if(NOT DEFINED Z_VCPKG_MSYS_${name}_ARCHIVE) + z_vcpkg_acquire_msys_download_package(Z_VCPKG_MSYS_${name}_ARCHIVE + URL "${Z_VCPKG_MSYS_${name}_URL}" + SHA512 "${Z_VCPKG_MSYS_${name}_SHA512}" + FILENAME "${Z_VCPKG_MSYS_${name}_FILENAME}" + ) + set(Z_VCPKG_MSYS_${name}_ARCHIVE "${Z_VCPKG_MSYS_${name}_ARCHIVE}" PARENT_SCOPE) + endif() + set(pkginfo_dir "${CURRENT_BUILDTREES_DIR}/vcpkg") + file(REMOVE_RECURSE "${pkginfo_dir}/${name}.txt" "${pkginfo_dir}/_tmp") + file(MAKE_DIRECTORY "${pkginfo_dir}/_tmp") + execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar xzf "${Z_VCPKG_MSYS_${name}_ARCHIVE}" .PKGINFO + WORKING_DIRECTORY "${pkginfo_dir}/_tmp" + ) + file(RENAME "${pkginfo_dir}/_tmp/.PKGINFO" "${pkginfo_dir}/${name}.txt") + file(STRINGS "${pkginfo_dir}/${name}.txt" builddate REGEX "builddate = [0-9]+") + string(REPLACE "builddate = " "" builddate "${builddate}") + set(${out_var} "${builddate}" PARENT_SCOPE) +endfunction() + +function(get_vcpkg_provides out_var name) + if(NOT DEFINED Z_VCPKG_MSYS_${name}_ARCHIVE) + z_vcpkg_acquire_msys_download_package(Z_VCPKG_MSYS_${name}_ARCHIVE + URL "${Z_VCPKG_MSYS_${name}_URL}" + SHA512 "${Z_VCPKG_MSYS_${name}_SHA512}" + FILENAME "${Z_VCPKG_MSYS_${name}_FILENAME}" + ) + set(Z_VCPKG_MSYS_${name}_ARCHIVE "${Z_VCPKG_MSYS_${name}_ARCHIVE}" PARENT_SCOPE) + endif() + set(pkginfo_dir "${CURRENT_BUILDTREES_DIR}/vcpkg") + file(REMOVE_RECURSE "${pkginfo_dir}/${name}.txt" "${pkginfo_dir}/_tmp") + file(MAKE_DIRECTORY "${pkginfo_dir}/_tmp") + execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar xzf "${Z_VCPKG_MSYS_${name}_ARCHIVE}" .PKGINFO + WORKING_DIRECTORY "${pkginfo_dir}/_tmp" + ) + file(RENAME "${pkginfo_dir}/_tmp/.PKGINFO" "${pkginfo_dir}/${name}.txt") + file(STRINGS "${pkginfo_dir}/${name}.txt" provides REGEX "provides = .+") + string(REPLACE "provides = " "" provides "${provides}") + set(${out_var} "${provides}" PARENT_SCOPE) +endfunction() + +function(update_vcpkg_download script_file name new_url) + message(STATUS "- Updating vcpkg...") + if(NOT new_url MATCHES [[^https://mirror\.msys2\.org/.*/(([^/]*)-[^-/]+-[^-/]+-[^-/]+\.pkg\.tar\.(xz|zst))$]]) + message(FATAL_ERROR "Supplied URL does not match the expected pattern: ${arg_URL}") + endif() + set(filename "msys2-${CMAKE_MATCH_1}") + vcpkg_download_distfile(archive + URLS "${new_url}" + FILENAME "${filename}" + SKIP_SHA512 + ) + execute_process( + COMMAND "${CMAKE_COMMAND}" -E sha512sum "${archive}" + OUTPUT_VARIABLE sha512 + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX REPLACE " .*" "" sha512 "${sha512}") + vcpkg_replace_string("${SCRIPTS}/cmake/${script_file}" "${Z_VCPKG_MSYS_${name}_URL}" "${new_url}") + vcpkg_replace_string("${SCRIPTS}/cmake/${script_file}" "${Z_VCPKG_MSYS_${name}_SHA512}" "${sha512}") +endfunction() + +function(pretty_dependencies out_var list_name) + foreach(dependency IN LISTS ignored_dependencies) + list(TRANSFORM ${list_name} REPLACE "^${dependency}\$" "(${dependency})") + endforeach() + list(JOIN ${list_name} " " list_string) + set(${out_var} "${list_string}" PARENT_SCOPE) +endfunction() + +function(analyze_package_list list_var script) + message(STATUS "*** Analyzing packages in '${script}'") + vcpkg_list(SET critical) # Packages which can be upgraded and are fairly old in vcpkg + vcpkg_list(SET mismatched_deps) # Packages which have vcpkg deps different from msys2 deps + vcpkg_list(SET missing) # Packages used in (new) deps but not declared + vcpkg_list(SET upgradable) # Packages which can be upgrade but are fairly fresh in vcpkg + vcpkg_list(SET vanished) # Packages which vanished from the msys2 database + + # Preload details from direct packages + foreach(name IN LISTS ${list_var}) + if(NOT Z_VCPKG_MSYS_${name}_DIRECT) + continue() + endif() + get_vcpkg_provides(vcpkg_provides "${name}") + set(Z_VCPKG_MSYS_${name}_PROVIDES "${vcpkg_provides}") + foreach(provided IN LISTS vcpkg_provides) + set(Z_VCPKG_MSYS_${provided}_PROVIDED_BY "${name}") + endforeach() + endforeach() + + # msys2.org removes packages 1.75 years after it was removed from the active database, + # cf. https://www.msys2.org/docs/faq/#how-long-are-old-packages-kept-on-repomsys2org + # We don't know the date of that replacement, and mirrors might use a shorter time. + # But we can compare the build date of the package currently downloaded by vcpkg + # and the build date of the package in the msys2 database. + # If this time span exceeds 'max_age', an update is marked as critical. + set(max_age 365) # days + math(EXPR minimum_builddate "${now} - 6 * 30 * 24 * 3600") + foreach(name IN LISTS ${list_var}) + if(Z_VCPKG_MSYS_${name}_DIRECT) + message(STATUS "${name} (DIRECT)") + elseif("DIRECT_ONLY" IN_LIST ARGN) + continue() + else() + message(STATUS "${name}") + endif() + set(vcpkg_url "${Z_VCPKG_MSYS_${name}_URL}") + set(vcpkg_deps "${Z_VCPKG_MSYS_${name}_DEPS}") + set(vcpkg_provides "${Z_VCPKG_MSYS_${name}_PROVIDES}") + + set(repo "msys") + if(name MATCHES "^mingw-w64-x86_64") + set(repo "mingw64") + elseif(name MATCHES "^mingw-w64-i686") + set(repo "mingw32") + elseif(name MATCHES "^mingw-w64-clang-aarch64") + set(repo "clangarm64") + endif() + + file(GLOB files "${${repo}_repo_files}/${name}-*/desc") + set(found 0) + foreach(file IN LISTS files) + # Find the package + file(STRINGS "${file}" desc) + if(NOT desc MATCHES "%NAME%;${name};") + continue() + elseif(NOT desc MATCHES "%FILENAME%;([^;]+)") + continue() + endif() + set(found 1) + set(current_url "${${repo}_repo_url}/${CMAKE_MATCH_1}") + # Check the URL + if(NOT vcpkg_url STREQUAL current_url AND NOT current_url IN_LIST ignored_updates) + get_vcpkg_builddate(vcpkg_builddate "${name}") + age_in_days(vcpkg_age "${vcpkg_builddate}") + pretty_age(vcpkg_age_pretty "${vcpkg_age}") + set(current_age "") + if(desc MATCHES "%BUILDDATE%;([0-9]+)") + age_in_days(current_age "${CMAKE_MATCH_1}") + endif() + pretty_age(current_age_string "${current_age}") + message(STATUS "- vcpkg: ${vcpkg_url} ${vcpkg_age_pretty}") + message(STATUS "+ msys2: ${current_url} ${current_age_string}") + + set(age_diff "0") + if(NOT vcpkg_age STREQUAL "" AND NOT current_age STREQUAL "") + math(EXPR age_diff "${current_age} - ${vcpkg_age}") + endif() + if(age_diff GREATER max_age) + if("update-all" IN_LIST FEATURES) + update_vcpkg_download("${script}" "${name}" "${current_url}") + else() + vcpkg_list(APPEND critical "${name}") + endif() + elseif(NOT vcpkg_url STREQUAL current_url) + if("update-all" IN_LIST FEATURES) + update_vcpkg_download("${script}" "${name}" "${current_url}") + else() + vcpkg_list(APPEND upgradable "${name}") + endif() + endif() + endif() + # Check the dependencies + if(desc MATCHES "%DEPENDS%;([^%]*)" OR vcpkg_deps) + list(JOIN CMAKE_MATCH_1 " " current_deps) + separate_arguments(current_deps UNIX_COMMAND "${current_deps}") + list(TRANSFORM current_deps REPLACE "[<=>].*" "") + list(SORT current_deps) + list(SORT vcpkg_deps) + pretty_dependencies(current_deps_string current_deps) + if(Z_VCPKG_MSYS_${name}_DIRECT AND NOT current_deps STREQUAL "") + message(STATUS "* msys2 dependencies: ${current_deps_string}") + elseif(NOT vcpkg_deps STREQUAL current_deps) + pretty_dependencies(vcpkg_deps_string vcpkg_deps) + message(STATUS "- vcpkg dependencies: ${vcpkg_deps_string}") + message(STATUS "+ msys2 dependencies: ${current_deps_string}") + list(REMOVE_ITEM current_deps ${ignored_dependencies}) + if(NOT vcpkg_deps STREQUAL current_deps) + vcpkg_list(APPEND mismatched_deps "${name}") + endif() + list(REMOVE_ITEM current_deps ${known_packages} ${${list_var}} ${ignored_dependencies}) + set(missing_deps "") + foreach(dep IN LISTS current_deps) + if(NOT DEFINED Z_VCPKG_MSYS_${dep}_PROVIDED_BY) + list(APPEND missing_deps "${dep}") + endif() + endforeach() + if(missing_deps) + list(JOIN missing_deps " " missing_deps_string) + message(STATUS "! unknown dependencies: ${missing_deps_string}") + vcpkg_list(APPEND missing ${missing_deps}) + endif() + endif() + endif() + # Check the "provides" + if(desc MATCHES "%PROVIDES%;([^%]*)" OR vcpkg_provides) + list(JOIN CMAKE_MATCH_1 " " current_provides) + separate_arguments(current_provides UNIX_COMMAND "${current_provides}") + list(TRANSFORM current_provides REPLACE "[<=>].*" "") + list(REMOVE_ITEM current_provides ${ignored_provides}) + list(JOIN vcpkg_provides " " vcpkg_provides_string) + if(NOT vcpkg_provides STREQUAL current_provides) + list(JOIN vcpkg_provides " " vcpkg_provides_string) + list(JOIN current_provides " " current_provides_string) + message(STATUS "- vcpkg provides: ${vcpkg_provides_string}") + message(STATUS "+ msys2 provides: ${current_provides_string}") + elseif(NOT vcpkg_provides STREQUAL "") + message(STATUS "* provides: ${vcpkg_provides_string}") + endif() + endif() + endforeach() + if(NOT found AND NOT name IN_LIST known_delisted) + vcpkg_list(APPEND vanished "${name}") + get_vcpkg_builddate(vcpkg_builddate "${name}") + age_in_days(vcpkg_age "${vcpkg_builddate}") + pretty_age(vcpkg_age_pretty "${vcpkg_age}") + message(STATUS "- vcpkg: ${vcpkg_url} ${vcpkg_age_pretty}") + message(STATUS "! msys2: no match for ${name}") + + age_in_days(current_age "${now}") + set(age_diff "0") + if(NOT vcpkg_age STREQUAL "" AND NOT current_age STREQUAL "") + math(EXPR age_diff "${current_age} - ${vcpkg_age}") + endif() + if(age_diff GREATER max_age) + vcpkg_list(APPEND critical "${name}") + endif() + endif() + endforeach() + + if(mismatched_deps) + list(JOIN mismatched_deps " " mismatched_deps) + message(WARNING "The following msys2 packages have changed dependencies: ${mismatched_deps}") + endif() + if(missing) + list(SORT missing) + list(REMOVE_DUPLICATES missing) + list(JOIN missing " " missing) + message(WARNING "The following msys2 packages would be needed to update all dependencies: ${missing}") + endif() + if(upgradable) + list(JOIN upgradable " " upgradable) + message(WARNING "The following msys2 packages could be updated: ${upgradable}") + endif() + if(critical) + list(JOIN critical " " critical) + message(SEND_ERROR "The following msys2 packages were build more than 6 months ago and should be updated: ${critical}") + endif() + if(vanished) + list(JOIN vanished " " vanished) + message(SEND_ERROR "The following msys2 packages are no longer in the database: ${vanished}") + endif() + message(STATUS "*** Analyzing packages in '${script}' done") +endfunction() + +message(STATUS "*** Downloading current msys2 package lists") +string(TIMESTAMP stamp "%Y-%m-%d" UTC) +foreach(repo IN ITEMS msys mingw32 mingw64 clangarm64) + string(REPLACE "/" "-" local_file "msys2-${stamp}-${repo}.files") + set(archive "${DOWNLOADS}/${local_file}") + vcpkg_download_distfile(repo_files_archive + URLS "${${repo}_repo_url}/${repo}.files" + FILENAME "${local_file}" + SKIP_SHA512 + ) + vcpkg_extract_source_archive(repo_files + ARCHIVE "${repo_files_archive}" + NO_REMOVE_ONE_LEVEL + ) + set(${repo}_repo_files "${repo_files}") +endforeach() +message(STATUS "*** Downloading current msys2 package lists done") + +set(Z_VCPKG_MSYS_PACKAGES_RESOLVED "" CACHE INTERNAL "") +vcpkg_acquire_msys(msys_root Z_ALL_PACKAGES) +analyze_package_list(Z_VCPKG_MSYS_PACKAGES_RESOLVED "vcpkg_acquire_msys.cmake") +set(known_packages "${Z_VCPKG_MSYS_PACKAGES_RESOLVED}") + +set(Z_VCPKG_MSYS_PACKAGES_RESOLVED "" CACHE INTERNAL "") +vcpkg_find_acquire_program(PKGCONFIG) +vcpkg_acquire_msys(msys_root + NO_DEFAULT_PACKAGES + Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_acquire_pkgconfig_msys_declare_packages" + PACKAGES + mingw-w64-clang-aarch64-pkgconf + mingw-w64-x86_64-pkgconf + mingw-w64-i686-pkgconf +) +analyze_package_list(Z_VCPKG_MSYS_PACKAGES_RESOLVED "vcpkg_find_acquire_program(PKGCONFIG).cmake") + +set(CMAKE_Fortran_COMPILER "") +if(NOT VCPKG_TARGET_IS_WINDOWS) + set(CMAKE_Fortran_COMPILER "true") +endif() +set(Z_VCPKG_MSYS_PACKAGES_RESOLVED "" CACHE INTERNAL "") +include("${SCRIPTS}/cmake/vcpkg_find_fortran.cmake") +vcpkg_find_fortran(FORTRAN) +vcpkg_acquire_msys(msys_root + NO_DEFAULT_PACKAGES + Z_DECLARE_EXTRA_PACKAGES_COMMAND "z_vcpkg_find_fortran_msys_declare_packages" + PACKAGES + mingw-w64-x86_64-gcc-fortran + mingw-w64-i686-gcc-fortran +) +analyze_package_list(Z_VCPKG_MSYS_PACKAGES_RESOLVED "vcpkg_find_fortran.cmake") diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-msys2/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-msys2/vcpkg.json new file mode 100644 index 0000000..039d3df --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-msys2/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-msys2", + "version": "1", + "description": "Test vcpkg msys2 freshness", + "license": "MIT", + "supports": "(windows | mingw) & native", + "features": { + "update-all": { + "description": "Update all outdated packages in vcpkg_acquire_msys.cmake" + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/portfile.cmake new file mode 100644 index 0000000..9957972 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/portfile.cmake @@ -0,0 +1,8 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DFEATURES=${FEATURES}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/CMakeLists.txt new file mode 100644 index 0000000..b39b93a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/CMakeLists.txt @@ -0,0 +1,26 @@ +cmake_minimum_required(VERSION 3.10...3.30) +project(mysql-connector-cpp-test CXX) + +if(APPLE) + set(CMAKE_CXX_STANDARD 11) +endif() + +# proper export +add_executable(unofficial-mysql-connector-cpp main.cpp) +find_package(unofficial-mysql-connector-cpp CONFIG REQUIRED) +target_link_libraries(unofficial-mysql-connector-cpp PRIVATE unofficial::mysql-connector-cpp::connector) + +# partial re-implementation +add_executable(mysql-concpp-xdevapi main.cpp) +find_package(mysql-concpp CONFIG REQUIRED) +target_link_libraries(mysql-concpp-xdevapi PRIVATE $<IF:$<TARGET_EXISTS:mysql::concpp-xdevapi>,mysql::concpp-xdevapi,mysql::concpp-xdevapi-static>) + +if("jdbc" IN_LIST FEATURES) + # proper export + add_executable(unofficial-mysql-connector-cpp-jdbc jdbc.cpp) + target_link_libraries(unofficial-mysql-connector-cpp-jdbc PRIVATE unofficial::mysql-connector-cpp::connector-jdbc) + + # partial re-implementation + add_executable(mysql-concpp-jdbc jdbc.cpp) + target_link_libraries(mysql-concpp-jdbc PRIVATE $<IF:$<TARGET_EXISTS:mysql::concpp-jdbc>,mysql::concpp-jdbc,mysql::concpp-jdbc-static>) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/jdbc.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/jdbc.cpp new file mode 100644 index 0000000..2dd74e2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/jdbc.cpp @@ -0,0 +1,7 @@ +#include <mysql/jdbc.h> + +int main() +{ + sql::Driver* driver = sql::mysql::get_driver_instance(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/main.cpp new file mode 100644 index 0000000..de32b2d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/project/main.cpp @@ -0,0 +1,7 @@ +#include <mysqlx/xdevapi.h> + +int main() +{ + mysqlx::Session sess("mysqlx://vcpkg@127.0.0.1"); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/vcpkg.json new file mode 100644 index 0000000..e844982 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mysql-connector-cpp/vcpkg.json @@ -0,0 +1,31 @@ +{ + "name": "vcpkg-ci-mysql-connector-cpp", + "version-string": "ci", + "description": "Validates mysql-connector-cpp", + "dependencies": [ + "mysql-connector-cpp", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "jdbc", + "platform": "x64 & static" + } + ], + "features": { + "jdbc": { + "description": "Test jdbc", + "dependencies": [ + { + "name": "mysql-connector-cpp", + "features": [ + "jdbc" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/portfile.cmake new file mode 100644 index 0000000..8a2079b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/CMakeLists.txt new file mode 100644 index 0000000..b700acb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(mzying2001-sw-test LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(sw CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE sw::sw)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/main.cpp new file mode 100644 index 0000000..8c9197e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/project/main.cpp @@ -0,0 +1,13 @@ +#include <sw/SimpleWindow.h>
+int main()
+{
+ sw::Window wnd;
+ sw::Button btn;
+ wnd.SetLayout<sw::FillLayout>();
+ btn.AddHandler(sw::ButtonBase_Clicked,
+ [](sw::UIElement& sender, sw::RoutedEventArgs& e) {
+ sw::MsgBox::Show(L"Hello, SimpleWindow!");
+ });
+ wnd.AddChild(btn);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/vcpkg.json new file mode 100644 index 0000000..c30a469 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-mzying2001-sw/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-mzying2001-sw", + "version-string": "ci", + "description": "Validates mzying2001-sw", + "dependencies": [ + "mzying2001-sw", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/portfile.cmake new file mode 100644 index 0000000..b6dc884 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/portfile.cmake @@ -0,0 +1,20 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# This test does not support cross-compilation due to nanobind's usage of the +# Python interpreter to figure out Python module suffix. +if(VCPKG_CROSSCOMPILING) + message(WARNING "Skipping vcpkg-ci-nanobind because it is not expected to work when cross-compiling") + return() +endif() + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO wjakob/nanobind_example + REF 4b5c9bd484dec77e085a188dcefc536aed69aae9 + SHA512 ec7eeb25b5c5ee2e8bbcc48e78719dc6e5211cf54794dd3c370ad3e8d685fbc8b79435890da3b9481656169efaa87b77e3ea55ce864efd670dd9ea0600dee77d + HEAD_REF master +) + +vcpkg_cmake_configure(SOURCE_PATH "${SOURCE_PATH}") + +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/vcpkg.json new file mode 100644 index 0000000..5c5baf8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nanobind/vcpkg.json @@ -0,0 +1,14 @@ +{ + "name": "vcpkg-ci-nanobind", + "version-date": "2025-04-03", + "description": "A nanobind example project", + "homepage": "https://nanobind.readthedocs.io/en/latest/", + "license": "BSD-3-Clause", + "dependencies": [ + "nanobind", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-netgen/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-netgen/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-netgen/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-netgen/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-netgen/vcpkg.json new file mode 100644 index 0000000..a532ee7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-netgen/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-netgen", + "version-string": "ci", + "description": "Force non-default features of netgen within vcpkg CI", + "homepage": "https://github.com/microsoft/vcpkg", + "dependencies": [ + { + "name": "netgen", + "features": [ + "cgns", + "jpeg", + "mpeg", + "occ" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nss/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-nss/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nss/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/CMakeLists.txt new file mode 100644 index 0000000..d51af06 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/CMakeLists.txt @@ -0,0 +1,10 @@ +cmake_minimum_required(VERSION 3.30) +project(nss-test C) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(nss_pc nss REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::nss_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/main.c new file mode 100644 index 0000000..dc5c8ce --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nss/project/main.c @@ -0,0 +1,9 @@ +#include <nss.h> + +int main() +{ + const char* configdir = "./DONOTUSE"; + SECStatus rv = NSS_Initialize(configdir, "", "", SECMOD_DB, NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE); + NSS_Shutdown(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-nss/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-nss/vcpkg.json new file mode 100644 index 0000000..301ed63 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-nss/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-nss", + "version-string": "ci", + "description": "Port to validate nss in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "nss", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-octave/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-octave/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-octave/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-octave/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-octave/vcpkg.json new file mode 100644 index 0000000..1bf4ba9 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-octave/vcpkg.json @@ -0,0 +1,32 @@ +{ + "name": "vcpkg-ci-octave", + "version": "0.0.0", + "description": "Test the octave feature", + "dependencies": [ + { + "name": "octave", + "features": [ + "amd", + "arpack", + "bz2", + "camd", + "ccolamd", + "cholmod", + "colamd", + "curl", + "cxsparse", + "fltk", + "fontconfig", + "freetype", + "graphicsmagick", + "gui", + "hdf5", + "klu", + "portaudio", + "qhull", + "spqr", + "umfpack" + ] + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openblas/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/portfile.cmake new file mode 100644 index 0000000..d2a6e58 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/portfile.cmake @@ -0,0 +1,4 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/CMakeLists.txt new file mode 100644 index 0000000..4d061e7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/CMakeLists.txt @@ -0,0 +1,8 @@ +cmake_minimum_required(VERSION 3.10) + +project(vcpkg-ci-openblas C) + +find_package(OpenBLAS CONFIG REQUIRED) + +add_executable(fortran-interface main.c) +target_link_libraries(fortran-interface PRIVATE OpenBLAS::OpenBLAS) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/main.c new file mode 100644 index 0000000..04badb6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/project/main.c @@ -0,0 +1,19 @@ +#include <../openblas/cblas.h> /* check for header. */ + +extern void dgemm_(char*, char*, int*, int*,int*, double*, double*, int*, double*, int*, double*, double*, int*); + +int main() +{ + char ta = 'N'; + char tb = 'N'; + int m = 2; + int n = 2; + int k = 1; + double alpha = 0.5; + double A[2] = {1.0, 2.0}; // m x k + double B[2] = {3.0, 4.0}; // k x n + double beta = 0.05; + double C[4] = {100.0, 200.0, 300.0, 400.0}; // 2 x 2 + dgemm_(&ta, &tb, &m, &n, &k, &alpha, A, &m, B, &k, &beta, C, &m); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openblas/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/vcpkg.json new file mode 100644 index 0000000..de772b6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openblas/vcpkg.json @@ -0,0 +1,37 @@ +{ + "name": "vcpkg-ci-openblas", + "version-string": "ci", + "description": "Test openblas", + "license": null, + "dependencies": [ + "openblas", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test (mostly) everything", + "dependencies": [ + { + "name": "openblas", + "features": [ + "dynamic-arch" + ], + "platform": "linux" + }, + { + "name": "openblas", + "features": [ + "threads" + ], + "platform": "!windows" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-opencv/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-opencv/portfile.cmake new file mode 100644 index 0000000..0015715 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-opencv/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json new file mode 100644 index 0000000..b00ea1c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-opencv/vcpkg.json @@ -0,0 +1,223 @@ +{ + "name": "vcpkg-ci-opencv", + "version-string": "ci", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "dependencies": [ + { + "name": "opencv", + "default-features": false, + "features": [ + "ade", + "calib3d", + "contrib", + "eigen", + "ffmpeg", + "fs", + "highgui", + "intrinsics", + "jpeg", + "nonfree", + "png", + "quirc", + "thread", + "tiff" + ] + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "openmp" + ], + "platform": "!osx" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "jpegxl", + "openexr" + ], + "platform": "!uwp" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "opencl" + ], + "platform": "!uwp & !osx" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "dnn", + "webp" + ], + "platform": "!android" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "directml", + "dshow", + "msmf", + "win32ui" + ], + "platform": "windows & !uwp" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "tbb" + ], + "platform": "!uwp & !static" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "gapi", + "gstreamer" + ], + "platform": "!uwp & !(windows & static) & !android" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "python" + ], + "platform": "!uwp & !(windows & static) & !android & !linux" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "ovis" + ], + "platform": "!uwp & !android & !(windows & static)" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "cuda", + "cudnn", + "dnn-cuda" + ], + "platform": "(windows & x64 & !uwp) | (linux & x64) | (linux & arm64)" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "freetype", + "gdcm", + "ipp", + "openjpeg", + "qt", + "sfm", + "vtk", + "vulkan" + ], + "platform": "!uwp & !android & !(windows & (arm | arm64)) & !(osx & arm64)" + }, + { + "name": "opencv", + "default-features": false, + "features": [ + "aravis" + ], + "platform": "!android & !uwp" + }, + { + "name": "opencv2", + "default-features": false, + "features": [ + "eigen", + "jpeg", + "png", + "tiff" + ], + "platform": "!uwp & !(arm & windows) & !android" + }, + { + "name": "opencv2", + "default-features": false, + "features": [ + "jasper", + "opengl", + "qt" + ], + "platform": "!uwp & !android & !(windows & (arm | arm64))" + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "eigen", + "jpeg", + "nonfree", + "png", + "quirc", + "tiff" + ] + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "openmp" + ], + "platform": "!osx" + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "dnn", + "webp" + ], + "platform": "!android" + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "msmf", + "ovis", + "tbb" + ], + "platform": "windows & x64 & !static & !uwp" + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "gstreamer" + ], + "platform": "!uwp & !android & !(windows & static)" + }, + { + "name": "opencv3", + "default-features": false, + "features": [ + "contrib", + "freetype", + "gdcm", + "ipp", + "jasper", + "opengl", + "qt", + "sfm", + "vtk" + ], + "platform": "!uwp & !android & !(windows & (arm | arm64)) & !(osx & arm64)" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/CMakeLists.txt new file mode 100644 index 0000000..09db055 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.7) +project(vcpkg-ci-openimageio CXX) + +add_executable(main main.cpp) + +find_package(OpenImageIO CONFIG REQUIRED) +target_link_libraries(main PRIVATE OpenImageIO::OpenImageIO) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/main.cpp new file mode 100644 index 0000000..c0f900e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/project/main.cpp @@ -0,0 +1,7 @@ +#include <OpenImageIO/imageio.h> + +int main(int, char**) +{ + auto inp = OIIO::ImageInput::open("none"); + return inp ? 0 : 1; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/vcpkg.json new file mode 100644 index 0000000..73d989b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openimageio/vcpkg.json @@ -0,0 +1,48 @@ +{ + "name": "vcpkg-ci-openimageio", + "version-string": "ci", + "port-version": 1, + "description": "OpenImageIO testing within CI.", + "license": "MIT", + "dependencies": [ + { + "name": "openimageio", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "openimageio-features" + ], + "features": { + "openimageio-features": { + "description": "Enable OpenImageIO features", + "dependencies": [ + { + "name": "openimageio", + "default-features": false, + "features": [ + "ffmpeg", + "freetype", + "gif", + "libheif", + "libraw", + "opencolorio", + "opencv", + "openjpeg", + { + "name": "pybind11", + "platform": "!(windows & static) & !uwp & !mingw" + }, + "tools", + "viewer", + "webp" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/CMakeLists.txt new file mode 100644 index 0000000..4d66529 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.7) +project(openvpn3-test CXX) + +add_executable(main main.cpp) + +find_package(unofficial-openvpn3 CONFIG REQUIRED) +target_link_libraries(main PRIVATE unofficial::openvpn3::ovpncli) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/main.cpp new file mode 100644 index 0000000..ba1584a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/project/main.cpp @@ -0,0 +1,21 @@ +#include <openvpn/ovpncli.hpp> + +using namespace openvpn::ClientAPI; + +// Cf. https://github.com/OpenVPN/openvpn3/blob/master/README.rst#openvpn-3-client-core +class Client : public OpenVPNClient +{ +public: + void acc_event(const AppCustomControlMessageEvent &) override {} + void event(const Event&) override {} + void external_pki_cert_request(ExternalPKICertRequest &) override {} + void external_pki_sign_request(ExternalPKISignRequest &) override {} + void log(const LogInfo&) override {} + bool pause_on_connection_timeout() override { return false; } +}; + +int main() +{ + Client c; + return OpenVPNClient::stats_n(); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/vcpkg.json new file mode 100644 index 0000000..81c8f5f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-openvpn3/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-openvpn3", + "version-string": "ci", + "description": "Validates openvpn3", + "dependencies": [ + "openvpn3", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/portfile.cmake new file mode 100644 index 0000000..62422ca --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/portfile.cmake @@ -0,0 +1,7 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+)
+
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/CMakeLists.txt new file mode 100644 index 0000000..d8007be --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.26)
+
+project(vcpkg-ci-orange-math LANGUAGES CXX)
+
+set(CMAKE_CXX_STANDARD 23)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+add_executable(main main.cpp)
+
+find_package(omath CONFIG REQUIRED)
+target_link_libraries(main PRIVATE omath::omath)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/main.cpp new file mode 100644 index 0000000..ae7779f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/project/main.cpp @@ -0,0 +1,8 @@ +#include <omath/omath.hpp>
+
+int main()
+{
+ omath::Vector2 w = omath::Vector2(20.0, 30.0);
+ return 0;
+}
+
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/vcpkg.json new file mode 100644 index 0000000..dcbdd38 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-orange-math/vcpkg.json @@ -0,0 +1,13 @@ +{
+ "name": "vcpkg-ci-orange-math",
+ "version-string": "ci",
+ "description": "Testing packages which provide orange-math",
+ "license": null,
+ "dependencies": [
+ "orange-math",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ]
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-paraview/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-paraview/portfile.cmake new file mode 100644 index 0000000..0015715 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-paraview/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-paraview/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-paraview/vcpkg.json new file mode 100644 index 0000000..db38ffb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-paraview/vcpkg.json @@ -0,0 +1,43 @@ +{ + "name": "vcpkg-ci-paraview", + "version-date": "2022-12-01", + "description": "Port to force features of certain ports within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "paraview", + "default-features": false, + "features": [ + "tools" + ] + }, + { + "name": "paraview", + "default-features": false, + "features": [ + "mpi", + "python" + ], + "platform": "!(windows & static) & !x86" + }, + { + "name": "vtk", + "default-features": false, + "features": [ + "gdal", + "utf8", + "vtkm" + ], + "platform": "!x86" + }, + { + "name": "vtk", + "default-features": false, + "features": [ + "openvr" + ], + "platform": "!osx & !(windows & staticcrt)" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-plplot/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/portfile.cmake new file mode 100644 index 0000000..69f16ae --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/portfile.cmake @@ -0,0 +1,11 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + ${options} + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/CMakeLists.txt new file mode 100644 index 0000000..e77cc8f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.30) +project(plplot-test C CXX) + +find_package(plplot CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE + PLPLOT::plplot +) +target_compile_definitions(main PRIVATE USING_CMAKE) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(plplot_pc plplot REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::plplot_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/main.c new file mode 100644 index 0000000..b2d4cd8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/project/main.c @@ -0,0 +1,24 @@ + +#ifdef USING_CMAKE +#include <plplot/plplot.h> +#else +#include <plplot.h> +#endif + +int main() +{ + PLFLT x[5], y[5]; + for (int i = 0; i < 5; i++) + { + x[i] = 0.25 * (PLFLT)(i); + y[i] = 2.0 * x[i]; + } + + plinit(); + plenv(0.0, 1.0, 0.0, 2.0, 0, 0); + pllab("x", "y", "2D line plot"); + plline(5, x, y); + plend(); + + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-plplot/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/vcpkg.json new file mode 100644 index 0000000..e4e41f0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-plplot/vcpkg.json @@ -0,0 +1,34 @@ +{ + "name": "vcpkg-ci-plplot", + "version-string": "ci", + "description": "Port to force features of plplot within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "plplot", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "plplot", + "features": [ + "wxwidgets" + ], + "platform": "!android" + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-podofo/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/CMakeLists.txt new file mode 100644 index 0000000..eb248ce --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.16) +project(podofo-test) + +set(CMAKE_CXX_STANDARD 17) + +find_package(podofo CONFIG REQUIRED) + +add_executable(main main.cxx) +target_link_libraries(main PRIVATE podofo::podofo) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(podofo_pc libpodofo REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.cxx) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::podofo_pc) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/main.cxx b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/main.cxx new file mode 100644 index 0000000..595c445 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/project/main.cxx @@ -0,0 +1,16 @@ +#include <stdio.h> +#include <podofo/podofo.h> + +int main() +{ + PoDoFo::PdfMemDocument document; + auto font = document.GetFonts().SearchFont("Arial"); + if (document.GetPages().GetCount() > 0) + { + auto& page = document.GetPages().GetPageAt(0); + auto& signature = page.CreateField<PoDoFo::PdfSignature>("Signature2", PoDoFo::Rect()); + char x509certbuffer[256], pkeybuffer[256]; + PoDoFo::PdfSignerCms signer(x509certbuffer, pkeybuffer); + } + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-podofo/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/vcpkg.json new file mode 100644 index 0000000..5fbea68 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-podofo/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-podofo", + "version-string": "ci", + "description": "Port to fvalidate podofo CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "podofo", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/portfile.cmake new file mode 100644 index 0000000..9354a1e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_get_vcpkg_installed_python(PYTHON3) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPython_EXECUTABLE=${PYTHON3}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/CMakeLists.txt new file mode 100644 index 0000000..bc169ae --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.30) +project(pybind11-test CXX) + +set(PYBIND11_FINDPYTHON ON) +find_package(pybind11 CONFIG REQUIRED) + +# Easy +pybind11_add_module(test-pybind11 main.cpp) + +# Advanced +Python_add_library(test-python main.cpp) +target_link_libraries(test-python PRIVATE pybind11::headers) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/main.cpp new file mode 100644 index 0000000..4f4b09e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/project/main.cpp @@ -0,0 +1,10 @@ +#include <pybind11/pybind11.h> + +int mul(int i, int j) { + return i * j; +} + +PYBIND11_MODULE(example, m) { + m.doc() = "vcpkg pybind11 test"; + m.def("mul", &mul, "Multiplies two numbers"); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/vcpkg.json new file mode 100644 index 0000000..2406412 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-pybind11/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "vcpkg-ci-pybind11", + "version-string": "ci", + "description": "Port to test pybind11 in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + "pybind11", + "python3", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-python3/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-python3/portfile.cmake new file mode 100644 index 0000000..8c5cd4f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-python3/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+)
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/CMakeLists.txt new file mode 100644 index 0000000..6339bfa --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/CMakeLists.txt @@ -0,0 +1,87 @@ +cmake_minimum_required(VERSION 3.12)
+project(python3-test)
+
+set(Python_ARTIFACTS_PREFIX "_MEOW")
+
+# We need to opt-out of CMP0148 to be able to test the pre-CMake 3.12 Python
+# find modules. The old policy is deprecated, so, at some point, this aspect
+# of the test will have to go away.
+if(POLICY CMP0148)
+ cmake_policy(SET CMP0148 OLD)
+endif()
+
+# The purpose of this test is to ensure that we get the expected values
+# from the finders, not crosscompiling. So, let's not even go there.
+# These find_package() calls aren't required because FindPythonInterp
+# seems to not return a result in CI. Probably because FindPythonInterp
+# prefers the system Python instead of the executable from the python3
+# port.
+if(NOT CMAKE_CROSSCOMPILING)
+ find_package(PythonInterp)
+endif()
+find_package(PythonLibs)
+
+# The old find modules should NOT be prefixed.
+if(DEFINED PythonInterp_MEOW_FOUND OR DEFINED PYTHON_MEOW_EXECUTABLE)
+ message(FATAL_ERROR "FindPythonInterp prefixed the result variables")
+endif()
+if(DEFINED PythonLibs_MEOW_FOUND OR DEFINED PYTHON_MEOW_LIBRARIES)
+ message(FATAL_ERROR "FindPythonLibs prefixed the result variables")
+endif()
+
+function(test_result NAME TYPE EXPECTED UNEXPECTED)
+ if(NOT ${TYPE} ${EXPECTED}${NAME})
+ message(FATAL_ERROR "${EXPECTED}${NAME} should be ${TYPE}")
+ endif()
+ if(${TYPE} ${UNEXPECTED}${NAME})
+ message(FATAL_ERROR "${UNEXPECTED}${NAME} should not be ${TYPE}")
+ endif()
+endfunction()
+
+function(test_new_finder EXPECTED UNEXPECTED)
+ test_result(::Python TARGET ${EXPECTED} ${UNEXPECTED})
+ test_result(_LIBRARIES DEFINED ${EXPECTED} ${UNEXPECTED})
+
+ if(NOT CMAKE_CROSSCOMPILING)
+ test_result(_EXECUTABLE DEFINED ${EXPECTED} ${UNEXPECTED})
+ test_result(_STDLIB DEFINED ${EXPECTED} ${UNEXPECTED})
+ test_result(::Interpreter TARGET ${EXPECTED} ${UNEXPECTED})
+ endif()
+endfunction()
+
+if(NOT CMAKE_CROSSCOMPILING)
+ set(_INTERPRETER "Interpreter")
+endif()
+
+# The new find modules should be prefixed if CMake is 4.0+
+find_package(Python REQUIRED COMPONENTS ${_INTERPRETER} Development)
+if(CMAKE_VERSION VERSION_GREATER_EQUAL 4.0)
+ set(EXPECTED_PYTHON Python_MEOW)
+ set(UNEXPECTED_PYTHON Python)
+else()
+ set(EXPECTED_PYTHON Python)
+ set(UNEXPECTED_PYTHON Python_MEOW)
+endif()
+test_new_finder(${EXPECTED_PYTHON} ${UNEXPECTED_PYTHON})
+
+# Also test non-prefixed. Use Python3:: to avoid conflicts with Python_MEOW::
+# The test against Python3_MEOW should never happen because the prefix variable
+# should be Python3_ARTIFACT_PREFIX, but we set Python_ARTIFACT_PREFIX.
+find_package(Python3 REQUIRED COMPONENTS ${_INTERPRETER} Development)
+test_new_finder(Python3 Python3_MEOW)
+
+# Test embedding the libraries found.
+function(add_test_executable TARGET LIBRARIES INCLUDES)
+ add_executable(${TARGET} main.c)
+ target_link_libraries(${TARGET} PRIVATE ${LIBRARIES})
+ if(INCLUDES)
+ target_include_directories(${TARGET} PRIVATE ${INCLUDES})
+ endif()
+endfunction()
+
+# We're purposefully not testing the result of the old finders.
+# The python3 port never added a vcpkg-cmake-wrapper for FindPythonLibs,
+# and it seems like a poor use of time to do so at this point - the
+# old finders are soft removed as of CMake 3.27.
+add_test_executable(new_with_prefix "${EXPECTED_PYTHON}::Python" "")
+add_test_executable(new_without_prefix "${Python3_LIBRARIES}" "${Python3_INCLUDE_DIRS}")
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/main.c new file mode 100644 index 0000000..cdd5cbe --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-python3/project/main.c @@ -0,0 +1,19 @@ +#include <Python.h>
+
+int main()
+{
+ PyConfig config;
+ PyConfig_InitPythonConfig(&config);
+ config.write_bytecode = 0;
+ PyConfig_SetString(&config, &config.program_name, L"test");
+
+ PyStatus status = Py_InitializeFromConfig(&config);
+ if (PyStatus_Exception(status)) {
+ PyConfig_Clear(&config);
+ Py_ExitStatusException(status);
+ }
+
+ Py_FinalizeEx();
+ PyConfig_Clear(&config);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-python3/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-python3/vcpkg.json new file mode 100644 index 0000000..a2eca55 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-python3/vcpkg.json @@ -0,0 +1,37 @@ +{
+ "name": "vcpkg-ci-python3",
+ "version-string": "ci",
+ "description": "Port to test python3 in CI",
+ "homepage": "https://github.com/microsoft/vcpkg",
+ "license": "MIT",
+ "dependencies": [
+ "python3",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ],
+ "default-features": [
+ "ci"
+ ],
+ "features": {
+ "ci": {
+ "description": "Test features in CI",
+ "dependencies": [
+ {
+ "name": "python3",
+ "features": [
+ {
+ "name": "extensions",
+ "platform": "!(windows & staticcrt)"
+ },
+ {
+ "name": "readline",
+ "platform": "!windows"
+ }
+ ]
+ }
+ ]
+ }
+ }
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/portfile.cmake new file mode 100644 index 0000000..e3a7604 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/portfile.cmake @@ -0,0 +1,13 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+if(EXISTS "${CURRENT_INSTALLED_DIR}/share/Qt6Pdf/Qt6PdfTargets.cmake")
+ file(COPY_FILE "${CURRENT_INSTALLED_DIR}/share/Qt6Pdf/Qt6PdfTargets.cmake" "${CURRENT_BUILDTREES_DIR}/Qt6PdfTargets.cmake-${TARGET_TRIPLET}.log")
+endif()
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+ OPTIONS
+ "-DFEATURES=${FEATURES}"
+)
+
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/CMakeLists.txt new file mode 100644 index 0000000..be214f8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/CMakeLists.txt @@ -0,0 +1,17 @@ +cmake_minimum_required(VERSION 3.24)
+
+project(vcpkg-ci-qtwebengine LANGUAGES C CXX)
+
+add_executable(main main.cpp)
+
+if("pdf" IN_LIST FEATURES)
+ find_package(Qt6 REQUIRED COMPONENTS Pdf)
+ target_link_libraries(main PRIVATE Qt6::Pdf)
+ target_compile_definitions(main PRIVATE REQUIRE_PDF)
+endif()
+
+if("webengine" IN_LIST FEATURES)
+ find_package(Qt6 REQUIRED COMPONENTS WebEngineCore)
+ target_link_libraries(main PRIVATE Qt6::WebEngineCore)
+ target_compile_definitions(main PRIVATE REQUIRE_WEBENGINE)
+endif()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/main.cpp new file mode 100644 index 0000000..ecb352b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/project/main.cpp @@ -0,0 +1,18 @@ +#ifdef REQUIRE_PDF
+#include <QPdfDocument>
+#endif
+#ifdef REQUIRE_WEBENGINE
+#include <QWebEnginePage>
+#endif
+
+int main()
+{
+#ifdef REQUIRE_PDF
+ QPdfDocument doc(nullptr);
+#endif
+#ifdef REQUIRE_WEBENGINE
+ QObject* parent = nullptr;
+ QWebEnginePage page(parent);
+#endif
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/vcpkg.json new file mode 100644 index 0000000..545ad61 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-qtwebengine/vcpkg.json @@ -0,0 +1,45 @@ +{ + "name": "vcpkg-ci-qtwebengine", + "version-string": "ci", + "description": "Testing qtwebengine", + "license": null, + "dependencies": [ + "qtwebengine", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "ci" + ], + "features": { + "ci": { + "description": "Default CI configuration", + "dependencies": [ + { + "name": "vcpkg-ci-qtwebengine", + "default-features": false, + "features": [ + "pdf" + ], + "platform": "android | ios | (linux & !x86) | osx | (windows & x64 & !static)" + }, + { + "name": "vcpkg-ci-qtwebengine", + "default-features": false, + "features": [ + "webengine" + ], + "platform": "!static & ((linux & !x86) | osx | (windows & x64 & !static))" + } + ] + }, + "pdf": { + "description": "Test PDF module" + }, + "webengine": { + "description": "Test WebEngine module" + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/CMakeLists.txt new file mode 100644 index 0000000..13a2678 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.7) +project(soci-test CXX) + +if(APPLE) + set(CMAKE_CXX_STANDARD 11) +endif() + +add_executable(main main.cpp) + +find_package(unofficial-rest-rpc CONFIG REQUIRED) +target_link_libraries(main unofficial::rest-rpc::rest-rpc) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/main.cpp new file mode 100644 index 0000000..4165c75 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/project/main.cpp @@ -0,0 +1,9 @@ +#include <rest_rpc.hpp> + +int main() +{ + rest_rpc::rpc_client client("127.0.0.1", 8080); + client.connect(); + client.run(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/vcpkg.json new file mode 100644 index 0000000..814d21d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rest-rpc/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-rest-rpc", + "version-string": "ci", + "description": "Validates rest-rpc", + "dependencies": [ + "rest-rpc", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/CMakeLists.txt new file mode 100644 index 0000000..650d167 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/CMakeLists.txt @@ -0,0 +1,18 @@ +cmake_minimum_required(VERSION 3.10) +project(rtlsdr-test C) + +find_package(PkgConfig REQUIRED) + +block() + find_package(rtlsdr CONFIG REQUIRED) + + add_executable(rtlsdr_cmake main.c) + target_link_libraries(rtlsdr_cmake $<IF:$<TARGET_EXISTS:rtlsdr::rtlsdr>,rtlsdr::rtlsdr,rtlsdr::rtlsdr_static>) +endblock() + +block() + pkg_check_modules(librtlsdr IMPORTED_TARGET REQUIRED librtlsdr) + + add_executable(rtlsdr_pkgconfig main.c) + target_link_libraries(rtlsdr_pkgconfig PkgConfig::librtlsdr) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/main.c new file mode 100644 index 0000000..8dc76e6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/project/main.c @@ -0,0 +1,6 @@ +#include <rtl-sdr.h> + +int main() +{ + return (int)rtlsdr_get_device_count(); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/vcpkg.json new file mode 100644 index 0000000..9f3b1ca --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-rtlsdr/vcpkg.json @@ -0,0 +1,31 @@ +{ + "name": "vcpkg-ci-rtlsdr", + "version-string": "ci", + "description": "Validates rtlsdr", + "dependencies": [ + "rtlsdr", + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + { + "name": "tools", + "platform": "!android" + } + ], + "features": { + "tools": { + "description": "Install rtlsdr tools", + "dependencies": [ + { + "name": "rtlsdr", + "features": [ + "tools" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ryu/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/CMakeLists.txt new file mode 100644 index 0000000..c69040d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/CMakeLists.txt @@ -0,0 +1,6 @@ +cmake_minimum_required(VERSION 3.30)
+project(vcpkg-ci-ryu LANGUAGES C)
+find_package(ryu CONFIG REQUIRED)
+add_executable(test test.c)
+target_link_libraries(test PUBLIC RYU::ryu RYU::ryu_printf)
+install(TARGETS test RUNTIME DESTINATION bin/vcpkg-ci-ryu)
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ryu/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/portfile.cmake new file mode 100644 index 0000000..a5327e0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/portfile.cmake @@ -0,0 +1,9 @@ +set(VCPKG_POLICY_SKIP_ALL_POST_BUILD_CHECKS enabled) +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}") +vcpkg_cmake_install() +if(NOT VCPKG_CROSSCOMPILING) + vcpkg_execute_required_process(COMMAND "${CURRENT_PACKAGES_DIR}/bin/vcpkg-ci-ryu/test" WORKING_DIRECTORY "." LOGNAME release-test) + if(NOT VCPKG_BUILD_TYPE) + vcpkg_execute_required_process(COMMAND "${CURRENT_PACKAGES_DIR}/debug/bin/vcpkg-ci-ryu/test" WORKING_DIRECTORY "." LOGNAME debug-test) + endif() +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ryu/test.c b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/test.c new file mode 100644 index 0000000..b5fbd1f --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/test.c @@ -0,0 +1,21 @@ +#include <string.h> +#include <stdio.h> + +#include <ryu/ryu.h> +#include <ryu/ryu2.h> + +int main() { + char* result = d2s(3.14); + if (strcmp(result, "3.14E0") != 0) { + printf("Unexpected ryu: %s\n", result); + return 1; + } + + result = d2fixed(3.14159, 1); + if (strcmp(result, "3.1") != 0) { + printf("Unexpected ryu_printf: %s\n", result); + return 2; + } + + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-ryu/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/vcpkg.json new file mode 100644 index 0000000..4a937cd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-ryu/vcpkg.json @@ -0,0 +1,11 @@ +{ + "name": "vcpkg-ci-ryu", + "version-date": "2024-12-17", + "dependencies": [ + "ryu", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/CMakeLists.txt new file mode 100644 index 0000000..8032dee --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/CMakeLists.txt @@ -0,0 +1,25 @@ +cmake_minimum_required(VERSION 3.30) +project(sdl3-image-test C CXX) # C++ for tiff[lerc] + +block(SCOPE_FOR VARIABLES) + find_package(SDL3_image CONFIG REQUIRED) + + add_executable(main main.c) + target_link_libraries(main PRIVATE + $<IF:$<TARGET_EXISTS:SDL3_image::SDL3_image-shared>,SDL3_image::SDL3_image-shared,SDL3_image::SDL3_image-static> + ) +endblock() + +block(SCOPE_FOR VARIABLES) + find_package(PkgConfig REQUIRED) + pkg_check_modules(PC_SDL3_IMAGE sdl3-image REQUIRED IMPORTED_TARGET) + + add_executable(main-pkconfig main.c) + if(WIN32 AND NOT MINGW) + target_link_libraries(main-pkconfig PRIVATE PkgConfig::PC_SDL3_IMAGE) + else() + # Use raw flags, avoid find_library + target_compile_options(main-pkconfig PRIVATE ${PC_SDL3_IMAGE_CFLAGS}) + target_link_libraries(main-pkconfig PRIVATE ${PC_SDL3_IMAGE_LDFLAGS}) + endif() +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/main.c new file mode 100644 index 0000000..ed8a3bc --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/project/main.c @@ -0,0 +1,7 @@ +#include <SDL3_image/SDL_image.h> + +int main() +{ + IMG_Version(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/vcpkg.json new file mode 100644 index 0000000..369e623 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-image/vcpkg.json @@ -0,0 +1,36 @@ +{ + "name": "vcpkg-ci-sdl3-image", + "version-string": "ci", + "description": "Port to force features of sdl3-image within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "sdl3-image", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "sdl3-image", + "features": [ + "jpeg", + "png", + "tiff", + "webp" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/CMakeLists.txt new file mode 100644 index 0000000..3e8d4a3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.30) +project(sdl3-ttf-test C) + +find_package(SDL3_ttf CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE SDL3_ttf::SDL3_ttf) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(PC_SDL3_TTF sdl3-ttf REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::PC_SDL3_TTF) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/main.c new file mode 100644 index 0000000..dc280e5 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/project/main.c @@ -0,0 +1,9 @@ +#include <SDL3_ttf/SDL_ttf.h> + +int main() +{ + TTF_Init(); + TTF_Version(); + TTF_Quit(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/vcpkg.json new file mode 100644 index 0000000..c348ea9 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sdl3-ttf/vcpkg.json @@ -0,0 +1,68 @@ +{ + "name": "vcpkg-ci-sdl3-ttf", + "version-string": "ci", + "description": "Port to validate sdl3-ttf in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "sdl3-ttf", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "vcpkg-ci-sdl3-ttf", + "features": [ + "harfbuzz", + "plutosvg-freetype", + "svg" + ] + } + ] + }, + "harfbuzz": { + "description": "Use sdl3-ttf[harfbuzz]", + "dependencies": [ + { + "name": "sdl3-ttf", + "features": [ + "harfbuzz" + ] + } + ] + }, + "plutosvg-freetype": { + "description": "Use plutosvg[freetype]", + "dependencies": [ + { + "name": "plutosvg", + "features": [ + "freetype" + ] + } + ] + }, + "svg": { + "description": "Use sdl3-ttf[svg]", + "dependencies": [ + { + "name": "sdl3-ttf", + "features": [ + "svg" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/portfile.cmake new file mode 100644 index 0000000..0860f0c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/portfile.cmake @@ -0,0 +1,8 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-Dslang_DIR=${CURRENT_HOST_INSTALLED_DIR}/share/slang" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/project/CMakeLists.txt new file mode 100644 index 0000000..b986fbc --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/project/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.25) +project(shader-slang-test) + +find_package(slang CONFIG REQUIRED) + +set(CMAKE_EXECUTE_PROCESS_COMMAND_ECHO STDOUT) + +execute_process( + COMMAND "${SLANGC_EXECUTABLE}" -v + COMMAND_ERROR_IS_FATAL ANY +) + +add_custom_target(run-slang ALL + COMMAND slang::slangc -v +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/vcpkg.json new file mode 100644 index 0000000..a4514ad --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-shader-slang/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-shader-slang", + "version-string": "ci", + "description": "Test port to validate shader-slang", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "shader-slang", + "host": true + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-skia/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-skia/portfile.cmake new file mode 100644 index 0000000..b9d37dd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-skia/portfile.cmake @@ -0,0 +1,6 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_INSTALLED_DIR}/share/skia/example" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-skia/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-skia/vcpkg.json new file mode 100644 index 0000000..e59883b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-skia/vcpkg.json @@ -0,0 +1,48 @@ +{ + "name": "vcpkg-ci-skia", + "version-date": "2023-04-03", + "description": "Builds an app in order to validate the skia port.", + "license": "BSD-3-Clause", + "dependencies": [ + { + "name": "skia", + "default-features": false + }, + { + "name": "skia", + "default-features": false, + "features": [ + "metal" + ], + "platform": "osx" + }, + { + "name": "skia", + "default-features": false, + "features": [ + "graphite" + ], + "platform": "windows & !uwp" + }, + { + "name": "skia", + "default-features": false, + "features": [ + "dawn" + ], + "platform": "!android & !uwp" + }, + { + "name": "skia", + "default-features": false, + "features": [ + "vulkan" + ], + "platform": "linux | osx | (windows & !uwp)" + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-soci/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-soci/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-soci/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/CMakeLists.txt new file mode 100644 index 0000000..31535c1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.7) +project(soci-test CXX) + +if(APPLE) + set(CMAKE_CXX_STANDARD 11) +endif() + +add_executable(main main.cpp) + +find_package(SOCI CONFIG REQUIRED) +target_link_libraries(main PRIVATE $<IF:$<TARGET_EXISTS:SOCI::soci_mysql>,SOCI::soci_mysql,SOCI::soci_mysql_static>) +target_link_libraries(main PRIVATE $<IF:$<TARGET_EXISTS:SOCI::soci_postgresql>,SOCI::soci_postgresql,SOCI::soci_postgresql_static>) +target_link_libraries(main PRIVATE $<IF:$<TARGET_EXISTS:SOCI::soci_sqlite3>,SOCI::soci_sqlite3,SOCI::soci_sqlite3_static>) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/main.cpp new file mode 100644 index 0000000..86377ac --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-soci/project/main.cpp @@ -0,0 +1,11 @@ +#include <soci/soci.h> +#include <soci/mysql/soci-mysql.h> +#include <soci/postgresql/soci-postgresql.h> +#include <soci/sqlite3/soci-sqlite3.h> + +int main() +{ + soci::session mysql_db(soci::mysql, "test:mysql"); + soci::session pgsql_db(soci::postgresql, "test:postgresql"); + soci::session sqlite3_db(soci::sqlite3, "test.db"); +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-soci/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-soci/vcpkg.json new file mode 100644 index 0000000..8ff0c29 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-soci/vcpkg.json @@ -0,0 +1,20 @@ +{ + "name": "vcpkg-ci-soci", + "version-string": "ci", + "description": "Validates soci", + "supports": "x64 & (linux | osx | windows) & !uwp", + "dependencies": [ + { + "name": "soci", + "features": [ + "mysql", + "postgresql", + "sqlite3" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/portfile.cmake new file mode 100644 index 0000000..065116c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/portfile.cmake @@ -0,0 +1 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/vcpkg.json new file mode 100644 index 0000000..777022e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-sqlpp11/vcpkg.json @@ -0,0 +1,36 @@ +{ + "name": "vcpkg-ci-sqlpp11", + "version-string": "ci", + "description": "Port to force features of sqlpp11 within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "sqlpp11", + "features": [ + "sqlite3" + ] + }, + { + "name": "sqlpp11", + "features": [ + "postgresql" + ], + "platform": "!uwp" + }, + { + "name": "sqlpp11", + "features": [ + "mariadb" + ], + "platform": "android | (x86 & windows)" + }, + { + "name": "sqlpp11", + "features": [ + "mysql" + ], + "platform": "!android & !uwp & !(x86 & windows)" + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/portfile.cmake new file mode 100644 index 0000000..52f7481 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/portfile.cmake @@ -0,0 +1,8 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_find_acquire_program(PKGCONFIG) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/CMakeLists.txt new file mode 100644 index 0000000..d129464 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(tdlib-test CXX)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+
+find_package(Td CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE Td::TdStatic)
+
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(tdclient REQUIRED IMPORTED_TARGET tdclient)
+add_executable(main2 main.cpp)
+target_link_libraries(main2 PRIVATE PkgConfig::tdclient)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/main.cpp new file mode 100644 index 0000000..79f5bf2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/project/main.cpp @@ -0,0 +1,8 @@ +#include <td/telegram/Client.h>
+#include <memory>
+int main()
+{
+ std::unique_ptr<td::ClientManager> client_manager_;
+ auto response = client_manager_->receive(10);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/vcpkg.json new file mode 100644 index 0000000..07724ae --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tdlib/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-tdlib", + "version-string": "ci", + "description": "Validates tdlib", + "dependencies": [ + "tdlib", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/portfile.cmake new file mode 100644 index 0000000..8a2079b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/CMakeLists.txt new file mode 100644 index 0000000..ceedefc --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/CMakeLists.txt @@ -0,0 +1,11 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(tgbot-cpp-test CXX)
+set(CMAKE_CXX_STANDARD 14)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(Threads)
+find_package(Boost COMPONENTS system REQUIRED)
+find_package(CURL REQUIRED)
+find_package(TgBot CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_compile_definitions(main PRIVATE HAVE_CURL)
+target_link_libraries(main PRIVATE TgBot::TgBot)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/main.cpp new file mode 100644 index 0000000..dfe54c5 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/project/main.cpp @@ -0,0 +1,10 @@ +#include <tgbot/tgbot.h>
+using namespace TgBot;
+int main()
+{
+ CurlHttpClient curlHttpClient;
+ Bot bot("TOKEN", curlHttpClient);
+ bot.getApi().deleteWebhook();
+ auto fileContent = FileTools::read("file.txt");
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/vcpkg.json new file mode 100644 index 0000000..845adad --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tgbot-cpp/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-tgbot-cpp", + "version-string": "ci", + "description": "Validates tgbot-cpp", + "dependencies": [ + "tgbot-cpp", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/CMakeLists.txt new file mode 100644 index 0000000..4a54d5b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/CMakeLists.txt @@ -0,0 +1,16 @@ +cmake_minimum_required(VERSION 3.30) +project(tomlplusplus-test CXX) + + +find_package(tomlplusplus CONFIG REQUIRED) + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE tomlplusplus::tomlplusplus) + + +find_package(PkgConfig REQUIRED) +pkg_check_modules(tomlplusplus_pc tomlplusplus REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.cpp) +target_compile_features(main-pkconfig PRIVATE cxx_std_17) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::tomlplusplus_pc) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/main.cpp new file mode 100644 index 0000000..3382010 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/project/main.cpp @@ -0,0 +1,22 @@ +#include <iostream> +#include <toml++/toml.hpp> + +int main(int argc, char** argv) +{ + if (argc < 2) + return 1; + + try + { + toml::table tbl; + tbl = toml::parse_file(argv[1]); + std::cout << tbl << "\n"; + } + catch (const toml::parse_error& err) + { + std::cerr << "Parsing failed: " << err << "\n"; + return 2; + } + + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/vcpkg.json new file mode 100644 index 0000000..155989e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tomlplusplus/vcpkg.json @@ -0,0 +1,14 @@ +{ + "name": "vcpkg-ci-tomlplusplus", + "version-string": "ci", + "description": "Port to force features of tomlplusplus within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + "tomlplusplus", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/CMakeLists.txt new file mode 100644 index 0000000..9c5208a --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.30) +project(tree-sitter-test C) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(tree-sitter_pc tree-sitter REQUIRED IMPORTED_TARGET) +pkg_check_modules(tree-sitter-c_pc tree-sitter-c REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE + PkgConfig::tree-sitter_pc + PkgConfig::tree-sitter-c_pc +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/main.c new file mode 100644 index 0000000..cab3ce6 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/project/main.c @@ -0,0 +1,21 @@ +#include <stdio.h> +#include <string.h> +#include <tree_sitter/api.h> +#include <tree_sitter/tree-sitter-c.h> + +int main() +{ + TSParser *parser = ts_parser_new(); + ts_parser_set_language(parser, tree_sitter_c()); + + const char *source_code = "int main() { return -1; }\n"; + TSTree *tree = ts_parser_parse_string(parser, NULL, source_code, strlen(source_code)); + TSNode root_node = ts_tree_root_node(tree); + char *string = ts_node_string(root_node); + printf("Syntax tree: %s\n", string); + + free(string); + ts_tree_delete(tree); + ts_parser_delete(parser); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/vcpkg.json new file mode 100644 index 0000000..b418ddd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-tree-sitter/vcpkg.json @@ -0,0 +1,15 @@ +{ + "name": "vcpkg-ci-tree-sitter", + "version-string": "ci", + "description": "Port to test the tree-sitter group of port in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + "tree-sitter", + "tree-sitter-c", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unarr/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/portfile.cmake new file mode 100644 index 0000000..dd25706 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/portfile.cmake @@ -0,0 +1,10 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/CMakeLists.txt new file mode 100644 index 0000000..95009f8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/CMakeLists.txt @@ -0,0 +1,13 @@ +cmake_minimum_required(VERSION 3.25.1)
+project(unarr-test LANGUAGES C)
+set(CMAKE_C_STANDARD 99)
+set(CMAKE_C_STANDARD_REQUIRED ON)
+
+find_package(unarr CONFIG REQUIRED)
+add_executable(main main.c)
+target_link_libraries(main PRIVATE unarr::unarr)
+
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(libunarr REQUIRED IMPORTED_TARGET libunarr)
+add_executable(main2 main.c)
+target_link_libraries(main2 PRIVATE PkgConfig::libunarr)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/main.c new file mode 100644 index 0000000..0a987df --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/project/main.c @@ -0,0 +1,8 @@ +#include <unarr.h>
+int main()
+{
+ ar_stream *stream;
+ ar_archive *ar = ar_open_rar_archive(stream);
+ ar_close_archive(ar);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unarr/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/vcpkg.json new file mode 100644 index 0000000..38d8fe9 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unarr/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-unarr", + "version-string": "ci", + "description": "Validates unarr", + "dependencies": [ + "unarr", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/portfile.cmake new file mode 100644 index 0000000..6f0a127 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/portfile.cmake @@ -0,0 +1,10 @@ +SET(VCPKG_POLICY_EMPTY_PACKAGE enabled)
+
+vcpkg_find_acquire_program(PKGCONFIG)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${CURRENT_PORT_DIR}/project"
+ OPTIONS
+ "-DPKG_CONFIG_EXECUTABLE=${PKGCONFIG}"
+)
+vcpkg_cmake_build()
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/CMakeLists.txt new file mode 100644 index 0000000..43652ce --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/CMakeLists.txt @@ -0,0 +1,12 @@ +cmake_minimum_required(VERSION 3.5)
+
+project(vcpkg-ci-unicorn C)
+
+set(CMAKE_C_STANDARD 11)
+
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(unicorn REQUIRED IMPORTED_TARGET unicorn)
+
+add_executable(main main.c)
+
+target_link_libraries(main PRIVATE PkgConfig::unicorn)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/main.c new file mode 100644 index 0000000..9f7b3ed --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/project/main.c @@ -0,0 +1,8 @@ +#include <unicorn/unicorn.h>
+
+int main()
+{
+ uc_engine* uc;
+ uc_open(UC_ARCH_X86, UC_MODE_32, &uc);
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/vcpkg.json new file mode 100644 index 0000000..71ef60d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unicorn/vcpkg.json @@ -0,0 +1,13 @@ +{
+ "name": "vcpkg-ci-unicorn",
+ "version-string": "ci",
+ "description": "Testing packages which provide unicorn",
+ "license": null,
+ "dependencies": [
+ "unicorn",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ }
+ ]
+}
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/portfile.cmake new file mode 100644 index 0000000..0122f05 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/portfile.cmake @@ -0,0 +1,9 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) +set(ENV{PKG_CONFIG} "${PKGCONFIG}") + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/CMakeLists.txt new file mode 100644 index 0000000..48baa06 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.30) +project(unixodbc-test C) + +# legacy vcpkg-only name, now forwarding to "unofficial" names +find_package(unixodbc CONFIG REQUIRED) + +add_executable(main main.c) +target_link_libraries(main PRIVATE UNIX::odbc) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(unixodbc_pc odbc REQUIRED IMPORTED_TARGET) + +add_executable(main-pkconfig main.c) +target_link_libraries(main-pkconfig PRIVATE PkgConfig::unixodbc_pc) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/main.c b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/main.c new file mode 100644 index 0000000..cf182c1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/project/main.c @@ -0,0 +1,27 @@ +/* https://www.unixodbc.org/doc/ProgrammerManual/Tutorial/ has + * #include <odbc/sql.h> + * but actual pkgconfig files and MS ODBC documentation suggest + * #include <sql.h> + */ +#include <sql.h> +#include <stdio.h> + +int main() +{ + SQLHENV odbc_handle; + long result = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &odbc_handle); + if ((result != SQL_SUCCESS) && (result != SQL_SUCCESS_WITH_INFO)) + return 1; + + SQLCHAR l_dsn[100], l_desc[100]; + SQLUSMALLINT l_len1, l_len2, l_next; + for (short int l_next = SQL_FETCH_FIRST; + SQLDataSources(odbc_handle, l_next, l_dsn, sizeof(l_dsn), &l_len1, l_desc, sizeof(l_desc), &l_len2) == SQL_SUCCESS; + l_next = SQL_FETCH_NEXT) + { + printf("Server '%s' (%s)\n", l_dsn, l_desc); + } + + SQLFreeHandle(SQL_HANDLE_ENV, odbc_handle); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/vcpkg.json new file mode 100644 index 0000000..6973fa9 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-unixodbc/vcpkg.json @@ -0,0 +1,14 @@ +{ + "name": "vcpkg-ci-unixodbc", + "version-string": "ci", + "description": "Test port for unixodbc usage", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + "unixodbc" + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/portfile.cmake new file mode 100644 index 0000000..bc78596 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/portfile.cmake @@ -0,0 +1,4 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure(SOURCE_PATH "${CURRENT_PORT_DIR}/project") +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/CMakeLists.txt new file mode 100644 index 0000000..9a09081 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/CMakeLists.txt @@ -0,0 +1,9 @@ +cmake_minimum_required(VERSION 3.30) +project(uwebsockets-test CXX) + +find_package(unofficial-uwebsockets CONFIG REQUIRED) + +add_executable(main main.cxx) +target_link_libraries(main PRIVATE + $<TARGET_NAME:unofficial::uwebsockets::uwebsockets> +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/main.cxx b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/main.cxx new file mode 100644 index 0000000..1c64685 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/project/main.cxx @@ -0,0 +1,10 @@ +#include <string> +#include <uwebsockets/App.h> + +int main() +{ + uWS::App().get("/hello", [](auto *res, auto *req) { + res->end("Hello World!"); + }); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/vcpkg.json new file mode 100644 index 0000000..17fa450 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-uwebsockets/vcpkg.json @@ -0,0 +1,34 @@ +{ + "name": "vcpkg-ci-uwebsockets", + "version-string": "ci", + "description": "Port to test features of uwebsockets within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "uwebsockets", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ], + "default-features": [ + "all" + ], + "features": { + "all": { + "description": "Test all features", + "dependencies": [ + { + "name": "uwebsockets", + "features": [ + "ssl", + "zlib" + ] + } + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/portfile.cmake new file mode 100644 index 0000000..3795fc8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/portfile.cmake @@ -0,0 +1,44 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +include("${CURRENT_HOST_INSTALLED_DIR}/share/unit-test-cmake/test-macros.cmake") + +if("scripts-cl-cpp-wrapper" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-scripts-cl_cpp_wrapper.cmake") +endif() + +if("vcpkg-make-cl-cpp-wrapper" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-vcpkg-make-cl_cpp_wrapper.cmake") +endif() + +if("z-vcpkg-make-prepare-compile-flags" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_prepare_compile_flags.cmake") +endif() + +if("z-vcpkg-make-normalize-arch" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_normalize_arch.cmake") +endif() + +if("z-vcpkg-make-determine-host-arch" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_determine_host_arch.cmake") +endif() + +if("z-vcpkg-make-determine-target-arch" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_determine_target_arch.cmake") +endif() + +if("z-vcpkg-make-determine-target-triplet" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_determine_target_triplet.cmake") +endif() + +if("z-vcpkg-make-z-adapt-lib-link-names" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_adapt_lib_link_names.cmake") +endif() + +if("z-vcpkg-make-get-configure-triplets" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_get_configure_triplets.cmake") +endif() + +if("z-vcpkg-make-get-crosscompiling" IN_LIST FEATURES) + include("${CMAKE_CURRENT_LIST_DIR}/test-z_vcpkg_make_get_crosscompiling.cmake") +endif() + +unit_test_report_result() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/configure b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/configure new file mode 100755 index 0000000..90f66c8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/configure @@ -0,0 +1,6 @@ +#!/bin/sh + +echo "${CPP:-cpp} ${CPPFLAGS} ${CFLAGS} ${TEST_FLAGS} > stdout.c < source.c" || exit 1 +${CPP:-cpp} ${CPPFLAGS} ${CFLAGS} ${TEST_FLAGS} > stdout.c < source.c || exit 2 +grep OOPS_ECHOED_INVOCATION stdout.c && exit 3 +exit 0 diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/source.c b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/source.c new file mode 100644 index 0000000..5d70292 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-cl_cpp_wrapper/source.c @@ -0,0 +1,5 @@ +#ifdef EXPECT_SUCCESS +/* okay */ +#else +#error "Forced error" +#endif diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-scripts-cl_cpp_wrapper.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-scripts-cl_cpp_wrapper.cmake new file mode 100644 index 0000000..67d8b70 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-scripts-cl_cpp_wrapper.cmake @@ -0,0 +1,25 @@ +block() +set(SOURCE_PATH "${CURRENT_PORT_DIR}/test-cl_cpp_wrapper") +set(VCPKG_BUILD_TYPE release) + +vcpkg_backup_env_variables(VARS CPP TEST_FLAGS) + +# Test that that CPP processes stdin +# vcpkg_configure_make picks scripts/buildsystems/make_wrapper/cl_cpp_wrapper + +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + set(ENV{CPP} "cl_cpp_wrapper") +endif() + +unit_test_ensure_fatal_error([[ + set(ENV{TEST_FLAGS} -DEXPECT_FAILURE) + vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}" COPY_SOURCE USE_WRAPPERS) +]]) + +unit_test_ensure_success([[ + set(ENV{TEST_FLAGS} -DEXPECT_SUCCESS) + vcpkg_configure_make(SOURCE_PATH "${SOURCE_PATH}" COPY_SOURCE USE_WRAPPERS) +]]) + +vcpkg_restore_env_variables(VARS CPP TEST_FLAGS) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-vcpkg-make-cl_cpp_wrapper.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-vcpkg-make-cl_cpp_wrapper.cmake new file mode 100644 index 0000000..b7a15ff --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-vcpkg-make-cl_cpp_wrapper.cmake @@ -0,0 +1,33 @@ +block() +set(SOURCE_PATH "${CURRENT_PORT_DIR}/test-cl_cpp_wrapper") +set(VCPKG_BUILD_TYPE release) + +vcpkg_backup_env_variables(VARS CPP TEST_FLAGS) + +# Test that that CPP processes stdin +# vcpkg_make_configure picks (installed) ports/vcpkg-make/wrappers/cl_cpp_wrapper + +if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW) + set(ENV{CPP} "cl_cpp_wrapper") +endif() + +unit_test_ensure_fatal_error([[ + set(ENV{TEST_FLAGS} -DEXPECT_FAILURE) + vcpkg_make_configure(SOURCE_PATH "${SOURCE_PATH}" COPY_SOURCE) +]]) + +unit_test_ensure_success([[ + set(ENV{TEST_FLAGS} -DEXPECT_SUCCESS) + vcpkg_make_configure(SOURCE_PATH "${SOURCE_PATH}" COPY_SOURCE) +]]) + +# In verbose mode (V=1), the command line is echoed. +# This is is diagnostic output and must not go to stdout. +unit_test_ensure_success([[ + set(ENV{TEST_FLAGS} "-DEXPECT_SUCCESS -DOOPS_ECHOED_INVOCATION") + set(ENV{V} 1) + vcpkg_make_configure(SOURCE_PATH "${SOURCE_PATH}" COPY_SOURCE) +]]) + +vcpkg_restore_env_variables(VARS CPP TEST_FLAGS) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_adapt_lib_link_names.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_adapt_lib_link_names.cmake new file mode 100644 index 0000000..4d38ae4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_adapt_lib_link_names.cmake @@ -0,0 +1,55 @@ +block(SCOPE_FOR VARIABLES) + +# Test 1: Basic Transformation +set(all_libs_list "libexample.dll;libutil.a;libutil2.lib;libutil3.so") +set(expected "-llibexample.dll;-llibutil;-llibutil2;-llibutil3") +set(VCPKG_TARGET_IS_WINDOWS FALSE) +set(VCPKG_TARGET_IS_MINGW FALSE) +set(VCPKG_LIBRARY_LINKAGE "static") + +unit_test_check_variable_equal( + [[ z_vcpkg_make_prepare_link_flags(IN_OUT_VAR all_libs_list VCPKG_TRANSFORM_LIBS) ]] + all_libs_list + "${expected}" +) + +# Test 2: Remove uuid on Windows +set(all_libs_list "libexample.dll;uuid.lib") +set(expected "-llibexample.dll") +set(VCPKG_TARGET_IS_WINDOWS TRUE) +set(VCPKG_TARGET_IS_MINGW FALSE) +set(VCPKG_LIBRARY_LINKAGE "static") + +unit_test_check_variable_equal( + [[ z_vcpkg_make_prepare_link_flags(IN_OUT_VAR all_libs_list VCPKG_TRANSFORM_LIBS) ]] + all_libs_list + "${expected}" +) + +# Test 3: MinGW Dynamic Linkage Handling +set(all_libs_list "libexample.so;uuid.a") +set(expected "-llibexample;-Wl,-Bstatic,-luuid,-Bdynamic") +set(VCPKG_TARGET_IS_WINDOWS FALSE) +set(VCPKG_TARGET_IS_MINGW TRUE) +set(VCPKG_LIBRARY_LINKAGE "dynamic") + +unit_test_check_variable_equal( + [[ z_vcpkg_make_prepare_link_flags(IN_OUT_VAR all_libs_list VCPKG_TRANSFORM_LIBS) ]] + all_libs_list + "${expected}" +) + +# Test 4: No Transformation Flag +set(all_libs_list "libexample.dll;uuid.lib") +set(expected "libexample.dll;uuid.lib") +set(VCPKG_TARGET_IS_WINDOWS FALSE) +set(VCPKG_TARGET_IS_MINGW FALSE) +set(VCPKG_LIBRARY_LINKAGE "static") + +unit_test_check_variable_equal( + [[ z_vcpkg_make_prepare_link_flags(IN_OUT_VAR all_libs_list) ]] + all_libs_list + "${expected}" +) + +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_host_arch.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_host_arch.cmake new file mode 100644 index 0000000..73e76db --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_host_arch.cmake @@ -0,0 +1,19 @@ +vcpkg_backup_env_variables(VARS PROCESSOR_ARCHITECTURE PROCESSOR_ARCHITEW6432) + +set(result_arch "NOTFOUND") + +# Test Case 1: x86_64 Architecture (Windows) +set(ENV{PROCESSOR_ARCHITECTURE} "AMD64") +unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_host_arch(result_arch) ]] + result_arch "x86_64" +) + +# Test Case 2: i686 Architecture (Windows) +set(ENV{PROCESSOR_ARCHITEW6432} "x86") +unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_host_arch(result_arch) ]] + result_arch "i686" +) + +vcpkg_restore_env_variables(VARS PROCESSOR_ARCHITECTURE PROCESSOR_ARCHITEW6432) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_arch.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_arch.cmake new file mode 100644 index 0000000..c82221c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_arch.cmake @@ -0,0 +1,15 @@ +# Test Case 1: Single Target Architecture +set(VCPKG_TARGET_ARCHITECTURE "x86_64") +set(VCPKG_OSX_ARCHITECTURES "x86_64") # Empty for non-OSX +set(result_arch) +z_vcpkg_make_determine_target_arch(result_arch) +unit_test_check_variable_equal([[]] result_arch "x86_64") + +# Test Case 2: Universal Architecture (OSX) +if (VCPKG_HOST_IS_OSX) + set(VCPKG_TARGET_ARCHITECTURE "x86_64") + set(VCPKG_OSX_ARCHITECTURES "x86_64;arm64") + set(result_arch) + z_vcpkg_make_determine_target_arch(result_arch) + unit_test_check_variable_equal([[]] result_arch "universal") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_triplet.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_triplet.cmake new file mode 100644 index 0000000..f1eeff0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_determine_target_triplet.cmake @@ -0,0 +1,31 @@ +if(VCPKG_TARGET_IS_ANDROID) + # tbd + +elseif(VCPKG_TARGET_IS_LINUX) + unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_target_triplet(triplet COMPILER_NAME "cc") ]] + triplet "" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_target_triplet(triplet COMPILER_NAME "aarch64-linux-gnu-gcc") ]] + triplet "aarch64-linux-gnu" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_target_triplet(triplet COMPILER_NAME "i686-linux-gnu-clang") ]] + triplet "i686-linux-gnu" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_determine_target_triplet(triplet COMPILER_NAME "x86_64-linux-gnu-gcc-13") ]] + triplet "x86_64-linux-gnu" + ) + +elseif(VPCKG_TARGET_IS_OSX) + # tbd + +elseif(VCPKG_TARGET_IS_UWP) + # tbd + +elseif(VCPKG_TARGET_IS_WINDOWS) + # tbd + +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_configure_triplets.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_configure_triplets.cmake new file mode 100644 index 0000000..df525da --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_configure_triplets.cmake @@ -0,0 +1,94 @@ +z_vcpkg_make_get_configure_triplets(triplets) + +# Either none or both of --host, --build +if(triplets MATCHES "--host|--build") + unit_test_check_variable_not_equal( + [[ string(REGEX MATCH "--host=([^;]+)" actual "${triplets}") ]] + CMAKE_MATCH_1 "" + ) + unit_test_check_variable_not_equal( + [[ string(REGEX MATCH "--build=([^;]+)" actual "${triplets}") ]] + CMAKE_MATCH_1 "" + ) +endif() + +# Get the actual --build option, for use in the following tests. +block(SCOPE_FOR VARIABLES PROPAGATE build_opt) + if(triplets STREQUAL "") + # Initially empty triplets are okay (= native build). + # Force non-empty triplets via explicit --host. + set(VCPKG_MAKE_BUILD_TRIPLET "--host=vcpkg") + z_vcpkg_make_get_configure_triplets(triplets) + endif() + string(REGEX MATCH "--host=[^;]*" host_opt "${triplets};") + unit_test_check_variable_not_equal( + [[ # match --host ]] + host_opt "" + ) + string(REGEX MATCH "--build=[^;]*" build_opt "${triplets};") + unit_test_check_variable_not_equal( + [[ # match --build ]] + build_opt "" + ) +endblock() + +# --host precedence: VCPKG_MAKE_BUILD_TRIPLET, COMPILER_NAME, hard-coded +if(VCPKG_MAKE_BUILD_TRIPLET MATCHES "--host=([^;]*)") + set(expected "${CMAKE_MATCH_1}") + z_vcpkg_make_get_configure_triplets(output COMPILER_NAME "x86_64-linux-gnu-clang-12") + unit_test_check_variable_equal( + [[ string(REGEX MATCH "--host=([^;]*)" actual "${output}") ]] + CMAKE_MATCH_1 "${expected}" + ) +elseif(VCPKG_TARGET_IS_ANDROID) + unit_test_check_variable_equal( + [[ string(REGEX MATCH "--host=[^;]*-([^-;]*-(android|[^-;]*))" output "${triplets}") ]] + CMAKE_MATCH_1 "linux-android" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual COMPILER_NAME "/bin/armv7a-linux-androideabi28-clang") ]] + actual "--host=armv7a-linux-androideabi28;${build_opt}" + ) +elseif(VCPKG_TARGET_IS_MINGW) + unit_test_check_variable_equal( + [[ string(REGEX MATCH "--host=[^;]*-(mingw32|[^-;]*)" output "${triplets}") ]] + CMAKE_MATCH_1 "mingw32" + ) +elseif(VCPKG_TARGET_IS_LINUX) + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual COMPILER_NAME "gcc") ]] + actual "" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual COMPILER_NAME "/bin/aarch64-linux-gnu-gcc-13") ]] + actual "--host=aarch64-linux-gnu;${build_opt}" + ) + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual COMPILER_NAME "/usr/bin/x86_64-linux-gnu-clang-12") ]] + actual "--host=x86_64-linux-gnu;${build_opt}" + ) +elseif(VCPKG_TARGET_IS_UWP) + unit_test_check_variable_equal( + [[ string(REGEX MATCH "--host=[^;]*-([^-;]*-[^-;]*)" output "${triplets}") ]] + CMAKE_MATCH_1 "unknown-mingw32" + ) +elseif(VCPKG_TARGET_IS_WINDOWS) + unit_test_check_variable_equal( + [[ string(REGEX MATCH "--host=[^;]*-([^-;]*-[^-;]*)" output "${triplets}") ]] + CMAKE_MATCH_1 "pc-mingw32" + ) +endif() + +# VCPKG_MAKE_BUILD_TRIPLET robustness +block(SCOPE_FOR VARIABLES) + set(VCPKG_MAKE_BUILD_TRIPLET "--host=HHH;--build=BBB") + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual) ]] + actual "--host=HHH;--build=BBB" + ) + set(VCPKG_MAKE_BUILD_TRIPLET "--build=bbb;--host=hhh") + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_configure_triplets(actual) ]] + actual "--build=bbb;--host=hhh" + ) +endblock() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_crosscompiling.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_crosscompiling.cmake new file mode 100644 index 0000000..47148b8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_get_crosscompiling.cmake @@ -0,0 +1,53 @@ +# Named expected values +string(COMPARE NOTEQUAL "host" "build" crosscompiling) +string(COMPARE EQUAL "host" "build" native) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result) ]] + result "${native}" +) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --host=BBB --build=BBB) ]] + result "${native}" +) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --build=HHH --host=HHH) ]] + result "${native}" +) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --host=HHH --build=BBB) ]] + result "${crosscompiling}" +) + +# arguable, but without --build it leads to cross_compiling=maybe. +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --host=HHH) ]] + result "${crosscompiling}" +) + +# arguable, but without --host it leads to cross_compiling=maybe. +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --build=BBB) ]] + result "${crosscompiling}" +) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --host=HHH --build=BBB) ]] + result "${crosscompiling}" +) + +unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result --build=BBB --host=HHH) ]] + result "${crosscompiling}" +) + +if(NOT VCPKG_CROSSCOMPILING) + z_vcpkg_make_get_configure_triplets(configure_triplets) + unit_test_check_variable_equal( + [[ z_vcpkg_make_get_crosscompiling(result ${configure_triplets}) ]] + result "${native}" + ) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_normalize_arch.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_normalize_arch.cmake new file mode 100644 index 0000000..fdfe384 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_normalize_arch.cmake @@ -0,0 +1,28 @@ +set(test_cases + "amd64" "x86_64" + "AMD64" "x86_64" + "x64" "x86_64" + "x86" "i686" + "X86" "i686" + "ARM64" "aarch64" + "arm64" "aarch64" + "ARM" "arm" + "arm" "arm" + "x86_64" "x86_64" + "i686" "i686" + "aarch64" "aarch64" +) + +list(LENGTH test_cases num_items) +math(EXPR num_tests "${num_items} / 2 - 1") + +foreach(idx RANGE 0 ${num_tests}) + math(EXPR input_idx "${idx} * 2") + math(EXPR output_idx "${idx} * 2 + 1") + list(GET test_cases ${input_idx} input) + list(GET test_cases ${output_idx} expected) + + set(result_arch) + z_vcpkg_make_normalize_arch(result_arch ${input}) + unit_test_check_variable_equal([[]] result_arch "${expected}") +endforeach() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_prepare_compile_flags.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_prepare_compile_flags.cmake new file mode 100644 index 0000000..89743b8 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/test-z_vcpkg_make_prepare_compile_flags.cmake @@ -0,0 +1,99 @@ +set(VCPKG_COMBINED_C_FLAGS_Release "-O2 -DNDEBUG") +set(VCPKG_COMBINED_CXX_FLAGS_Release "-O2 -DNDEBUG") +set(VCPKG_COMBINED_C_FLAGS_Debug "-g -O0 -DDEBUG") +set(VCPKG_COMBINED_CXX_FLAGS_Debug "-g -O0 -DDEBUG") +set(VCPKG_COMBINED_SHARED_LINKER_FLAGS_Release "-L/mylibpath") +set(VCPKG_COMBINED_SHARED_LINKER_FLAGS_Debug "-L/debuglibpath") +set(CURRENT_INSTALLED_DIR "C:/vcpkg_installed/x64-windows") + +# Test Case: Release Flag Generation +set(flags_out) +z_vcpkg_make_prepare_compile_flags( + COMPILER_FRONTEND "MSVC" + CONFIG "Release" + FLAGS_OUT flags_out + LANGUAGES "C" "CXX" +) + +set(expected_cflags "-Xcompiler -O2 -Xcompiler -DNDEBUG") +set(expected_cxxflags "-Xcompiler -O2 -Xcompiler -DNDEBUG") +set(expected_ldflags "-Xlinker -Xlinker -Xlinker -L/mylibpath") + +unit_test_check_variable_equal([[]] CFLAGS_Release "${expected_cflags}") +unit_test_check_variable_equal([[]] CXXFLAGS_Release "${expected_cxxflags}") +unit_test_check_variable_equal([[]] LDFLAGS_Release "${expected_ldflags}") + + +# Test Case: Debug flag generation +set(flags_out) +z_vcpkg_make_prepare_compile_flags( + COMPILER_FRONTEND "MSVC" + CONFIG "Debug" + FLAGS_OUT flags_out + LANGUAGES "C" "CXX" +) + +# Expected Debug flags +set(expected_cflags "-Xcompiler -g -Xcompiler -O0 -Xcompiler -DDEBUG") +set(expected_cxxflags "-Xcompiler -g -Xcompiler -O0 -Xcompiler -DDEBUG") +set(expected_ldflags "-Xlinker -Xlinker -Xlinker -L/debuglibpath") + +# Check the values of the Debug flags +unit_test_check_variable_equal([[]] CFLAGS_Debug "${expected_cflags}") +unit_test_check_variable_equal([[]] CXXFLAGS_Debug "${expected_cxxflags}") +unit_test_check_variable_equal([[]] LDFLAGS_Debug "${expected_ldflags}") + +# Test Case: NO_FLAG_ESCAPING (MSVC, Debug) +set(flags_out) +unset(CFLAGS_Debug) +unset(CXXFLAGS_Debug) +unset(LDFLAGS_Debug) +z_vcpkg_make_prepare_compile_flags( + NO_FLAG_ESCAPING + COMPILER_FRONTEND "MSVC" + CONFIG "Debug" + FLAGS_OUT flags_out + LANGUAGES "C" "CXX" +) + +set(expected_cflags "-g -O0 -DDEBUG") +set(expected_cxxflags "-g -O0 -DDEBUG") +set(expected_ldflags "-L/debuglibpath") + +unit_test_check_variable_equal([[]] CFLAGS_Debug "${expected_cflags}") +unit_test_check_variable_equal([[]] CXXFLAGS_Debug "${expected_cxxflags}") +unit_test_check_variable_equal([[]] LDFLAGS_Debug "${expected_ldflags}") + +# Test Case: Different Languages and Compiler Frontend (GCC) +set(flags_out) +z_vcpkg_make_prepare_compile_flags( + COMPILER_FRONTEND "GCC" + CONFIG "Release" + FLAGS_OUT flags_out + LANGUAGES "C" "CXX" "ASM" +) + +unit_test_check_variable_unset([[]] "${ASMFLAGS_Release}") +set(expected_gcc_cflags "-O2 -DNDEBUG") +unit_test_check_variable_equal([[]] expected_gcc_cflags "${CFLAGS_Release}") + +# Test Case: No Languages Defined (Should Default to C;CXX) +set(flags_out) +unset(CFLAGS_Release) +unset(CXXFLAGS_Release) +unset(LDFLAGS_Release) +unset(ASMFLAGS_Release) +z_vcpkg_make_prepare_compile_flags( + COMPILER_FRONTEND "MSVC" + CONFIG "Release" + FLAGS_OUT flags_out +) + +# Verify that both CFLAGS and CXXFLAGS are set since they should default to C and C++ +if(NOT CFLAGS_Release) + message(FATAL_ERROR "CFLAGS_Release not set") +endif() + +if(NOT CXXFLAGS_Release) + message(FATAL_ERROR "CXXFLAGS_Release not set") +endif()
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/vcpkg.json new file mode 100644 index 0000000..ecd76d4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-make/vcpkg.json @@ -0,0 +1,65 @@ +{ + "name": "vcpkg-ci-vcpkg-make", + "version-string": "ci", + "description": "Ensures that the vcpkg-make port functions are unit tested.", + "license": "MIT", + "dependencies": [ + { + "name": "unit-test-cmake", + "host": true + }, + { + "name": "vcpkg-make", + "host": true + } + ], + "default-features": [ + { + "name": "scripts-cl-cpp-wrapper", + "platform": "windows & !mingw" + }, + { + "name": "vcpkg-make-cl-cpp-wrapper", + "platform": "windows & !mingw" + }, + "z-vcpkg-make-normalize-arch", + "z-vcpkg-make-determine-host-arch", + "z-vcpkg-make-determine-target-arch", + "z-vcpkg-make-determine-target-triplet", + "z-vcpkg-make-get-configure-triplets", + "z-vcpkg-make-prepare-compile-flags", + "z-vcpkg-make-z-adapt-lib-link-names" + ], + "features": { + "scripts-cl-cpp-wrapper": { + "description": "Test the cl_cpp_wrapper in scripts" + }, + "vcpkg-make-cl-cpp-wrapper": { + "description": "Test the cl_cpp_wrapper in vcpkg-make" + }, + "z-vcpkg-make-normalize-arch": { + "description": "Test the z_vcpkg_make_normalize_arch function" + }, + "z-vcpkg-make-determine-host-arch": { + "description": "Test the z_vcpkg_make_determine_host_arch function" + }, + "z-vcpkg-make-determine-target-arch": { + "description": "Test the z_vcpkg_make_determine_target_arch function" + }, + "z-vcpkg-make-determine-target-triplet": { + "description": "Test the z_vcpkg_make_determine_target_arch triplet" + }, + "z-vcpkg-make-get-configure-triplets": { + "description": "Test the z_vcpkg_make_get_configure_triplets function" + }, + "z-vcpkg-make-get-crosscompiling": { + "description": "Test the z_vcpkg_make_get_crosscompiling function" + }, + "z-vcpkg-make-prepare-compile-flags": { + "description": "Test the z_vcpkg_make_prepare_compile_flags function" + }, + "z-vcpkg-make-z-adapt-lib-link-names": { + "description": "Test the z_vcpkg_make_z_adapt_lib_link_names function" + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/portfile.cmake new file mode 100644 index 0000000..6cf4616 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/portfile.cmake @@ -0,0 +1,20 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +find_program(NODEJS + NAMES node + PATHS + "${CURRENT_INSTALLED_DIR}/tools/node" + "${CURRENT_INSTALLED_DIR}/tools/node/bin" + NO_DEFAULT_PATH + REQUIRED +) +execute_process( + COMMAND "${NODEJS}" --version + COMMAND_ECHO STDOUT + COMMAND_ERROR_IS_FATAL ANY +) +execute_process( + COMMAND "${NODEJS}" -p "process.arch" + COMMAND_ECHO STDOUT + COMMAND_ERROR_IS_FATAL ANY +) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/vcpkg.json new file mode 100644 index 0000000..20f8b6d --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vcpkg-tool-nodejs/vcpkg.json @@ -0,0 +1,9 @@ +{ + "name": "vcpkg-ci-vcpkg-tool-nodejs", + "version-string": "ci", + "description": "Test port to validate vcpkg-tool-nodejs", + "supports": "native", + "dependencies": [ + "vcpkg-tool-nodejs" + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/portfile.cmake new file mode 100644 index 0000000..b7616f5 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/portfile.cmake @@ -0,0 +1,22 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO vsg-dev/vsgQt + REF v0.4.0 + SHA512 0c753d573eeec77bdddab0f3499b7fbabc4c0840246501dd83ef1e3a96effacf9cd9a84d5c1c35b49462520a2840ddd02eeefa92c55b23dc44ce9fc285cbee3b + HEAD_REF master +) + +vcpkg_check_features(OUT_FEATURE_OPTIONS options + FEATURES + vsgxchange USE_VSGXCHANGE +) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS + "-DSOURCE_PATH=${SOURCE_PATH}" + ${options} +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/project/CMakeLists.txt new file mode 100644 index 0000000..1140386 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/project/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.16) +project(vsgqt-test) + +set(CMAKE_CXX_STANDARD 17) + +find_package(vsgQt CONFIG REQUIRED) + +add_executable(vsgqtviewer "${SOURCE_PATH}/examples/vsgqtviewer/main.cpp") +target_link_libraries(vsgqtviewer PRIVATE vsgQt::vsgQt) + +if (USE_VSGXCHANGE) + find_package(vsgXchange CONFIG REQUIRED) + target_compile_definitions(vsgqtviewer PRIVATE vsgXchange_FOUND) + target_link_libraries(vsgqtviewer PRIVATE vsgXchange::vsgXchange) +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/vcpkg.json new file mode 100644 index 0000000..c1052c0 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vsgqt/vcpkg.json @@ -0,0 +1,28 @@ +{ + "name": "vcpkg-ci-vsgqt", + "version-string": "ci", + "description": "Port to validate vsgqt in CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "vsgqt", + "default-features": false + } + ], + "default-features": [ + "vsgxchange" + ], + "features": { + "vsgxchange": { + "description": "Build with vsgxchange", + "dependencies": [ + "vsgxchange" + ] + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vxl/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/portfile.cmake new file mode 100644 index 0000000..8700efd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/portfile.cmake @@ -0,0 +1,8 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" + OPTIONS_DEBUG + -DBUILD_TYPE=debug +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/CMakeLists.txt new file mode 100644 index 0000000..2ac14a1 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/CMakeLists.txt @@ -0,0 +1,33 @@ +cmake_minimum_required(VERSION 3.7) +project(vnl-test CXX) + +if(APPLE) + set(CMAKE_CXX_STANDARD "11") +endif() + +find_package(VXL CONFIG REQUIRED) + +# The use file doesn't only set variables, +# but also directly calls include_directories(). +# (Calling link_directories() must remain disabled in vcpkg.) +# The imported targets don't carry the main include directories! +include("${VXL_CMAKE_DIR}/UseVXL.cmake") + +# Catch wrong link directories. +find_library(vcpkg_ci_vnl_library NAMES vnl REQUIRED) +cmake_path(GET vcpkg_ci_vnl_library PARENT_PATH vcpkg_ci_vnl_library_dir) +if(BUILD_TYPE STREQUAL "debug" AND NOT vcpkg_ci_vnl_library_dir MATCHES "/debug/lib\$") + message(SEND_ERROR "vil library directory is wrong." + "\n Expected path: '${VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib'" + "\n Actual path: '${vcpkg_ci_vnl_library_dir}'" + ) +endif() + +add_executable(main main.cpp) +target_link_libraries(main PRIVATE + $<TARGET_NAME:vil> # required. Needs image format deps + $<TARGET_NAME:vnl_algo> # test only: wants netlib + $<TARGET_NAME:vgl> # test only: wants polyclipping + $<TARGET_NAME:vgl_algo> # test only: wants image formats +) + diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/main.cpp new file mode 100644 index 0000000..681dc8b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/project/main.cpp @@ -0,0 +1,10 @@ +//#include <vxl_config.h> +#include <vil/vil_rgb.h> +#include <vil/vil_load.h> +#include <vil/vil_image_view.h> + +int main() +{ + vil_image_view<vil_rgb<vxl_byte> > img = vil_load("foo.tiff"); + return 0; +}
\ No newline at end of file diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-vxl/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/vcpkg.json new file mode 100644 index 0000000..0c0986e --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-vxl/vcpkg.json @@ -0,0 +1,19 @@ +{ + "name": "vcpkg-ci-vxl", + "version-string": "ci", + "description": "Port to force features of vxl within CI", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "vxl", + "features": [ + "core-imaging" + ] + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/portfile.cmake new file mode 100644 index 0000000..0122f05 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/portfile.cmake @@ -0,0 +1,9 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_find_acquire_program(PKGCONFIG) +set(ENV{PKG_CONFIG} "${PKGCONFIG}") + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/CMakeLists.txt new file mode 100644 index 0000000..a9e3405 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/CMakeLists.txt @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.16) +project(whisper-cpp-test) + +find_package(whisper CONFIG REQUIRED) + +add_executable(test-cmake main.cxx) +add_library(imported::whisper ALIAS whisper) +target_link_libraries(test-cmake PRIVATE imported::whisper) + +find_package(PkgConfig REQUIRED) +pkg_check_modules(whisper-cpp whisper REQUIRED IMPORTED_TARGET) + +add_executable(test-pkconfig main.cxx) +target_link_libraries(test-pkconfig PRIVATE PkgConfig::whisper-cpp) diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/main.cxx b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/main.cxx new file mode 100644 index 0000000..c9228dd --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/project/main.cxx @@ -0,0 +1,7 @@ +#include <whisper.h> + +int main() +{ + auto context_params = whisper_context_default_params(); + return 0; +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/vcpkg.json new file mode 100644 index 0000000..8f653d4 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-whisper-cpp/vcpkg.json @@ -0,0 +1,17 @@ +{ + "name": "vcpkg-ci-whisper-cpp", + "version-string": "ci", + "description": "Port to validate whisper-cpp", + "homepage": "https://github.com/microsoft/vcpkg", + "license": "MIT", + "dependencies": [ + { + "name": "whisper-cpp", + "default-features": false + }, + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/portfile.cmake new file mode 100644 index 0000000..d301fa7 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/portfile.cmake @@ -0,0 +1,34 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +vcpkg_check_features(OUT_FEATURE_OPTIONS OPTIONS + FEATURES + wxrc USE_WXRC +) + +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_INSTALLED_DIR}/share/wxwidgets/example" + DISABLE_PARALLEL_CONFIGURE # Need separate dbg log for following test + OPTIONS + ${OPTIONS} + -DCMAKE_CONFIG_RUN=1 + "-DPRINT_VARS=CMAKE_CONFIG_RUN;wxWidgets_LIBRARIES" +) +vcpkg_cmake_build() + +if(NOT VCPKG_BUILD_TYPE) + # Check that debug libs are still used after re-configuration, #24489 + set(config_log "config-${TARGET_TRIPLET}-dbg") + vcpkg_execute_required_process( + COMMAND "${CMAKE_COMMAND}" -DCMAKE_CONFIG_RUN=2 . + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg" + LOGNAME "${config_log}-2" + ) + file(STRINGS "${CURRENT_BUILDTREES_DIR}/${config_log}-out.log" expected REGEX "wxWidgets_LIBRARIES:=") + file(STRINGS "${CURRENT_BUILDTREES_DIR}/${config_log}-2-out.log" actual REGEX "wxWidgets_LIBRARIES:=") + if(NOT actual STREQUAL expected) + message(FATAL_ERROR "wxWidgets libraries changed after CMake re-run\n" + "actual:\n${actual}\n" + "expected:\n ${expected}\n" + ) + endif() +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/vcpkg.json new file mode 100644 index 0000000..10ba1aa --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-wxwidgets/vcpkg.json @@ -0,0 +1,30 @@ +{ + "name": "vcpkg-ci-wxwidgets", + "version-date": "2022-04-05", + "port-version": 1, + "description": "Builds a GUI app in order to validate the wxwidgets port.", + "dependencies": [ + { + "name": "vcpkg-cmake", + "host": true + }, + { + "name": "wxwidgets", + "default-features": false, + "features": [ + "example" + ] + } + ], + "default-features": [ + { + "name": "wxrc", + "platform": "native" + } + ], + "features": { + "wxrc": { + "description": "Test wxrc" + } + } +} diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/portfile.cmake new file mode 100644 index 0000000..8a2079b --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/portfile.cmake @@ -0,0 +1,5 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) +vcpkg_cmake_configure( + SOURCE_PATH "${CURRENT_PORT_DIR}/project" +) +vcpkg_cmake_build() diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/CMakeLists.txt b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/CMakeLists.txt new file mode 100644 index 0000000..2a289ef --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.28)
+project(yandex-disk-cpp-client-test LANGUAGES CXX)
+set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
+find_package(yandex-disk-cpp-client CONFIG REQUIRED)
+add_executable(main main.cpp)
+target_link_libraries(main PRIVATE yandex-disk-cpp-client::yandex-disk-cpp-client)
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/main.cpp b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/main.cpp new file mode 100644 index 0000000..0b2f175 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/project/main.cpp @@ -0,0 +1,7 @@ +#include <YandexDiskClient.h>
+int main()
+{
+ YandexDiskClient yandex("TOKEN");
+ auto quota = yandex.getQuotaInfo();
+ return 0;
+}
diff --git a/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/vcpkg.json new file mode 100644 index 0000000..1d92df2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-ci-yandex-disk-cpp-client/vcpkg.json @@ -0,0 +1,12 @@ +{ + "name": "vcpkg-ci-yandex-disk-cpp-client", + "version-string": "ci", + "description": "Validates yandex-disk-cpp-client", + "dependencies": [ + "yandex-disk-cpp-client", + { + "name": "vcpkg-cmake", + "host": true + } + ] +} diff --git a/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/portfile.cmake new file mode 100644 index 0000000..d31679c --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/portfile.cmake @@ -0,0 +1,72 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +if(VCPKG_HOST_IS_WINDOWS) + # The version-agnostic tool dir may already exist. + # Simulate/test with NASM. + file(REMOVE_RECURSE "${DOWNLOADS}/tools/nasm") + file(MAKE_DIRECTORY "${DOWNLOADS}/tools/nasm") +endif(VCPKG_HOST_IS_WINDOWS) + +# For each vcpkg_find_acquire_program(NAME).cmake script, +# there must be a literal call to vcpkg_find_acquire_program(NAME) +vcpkg_list(SET variables) +macro(vcpkg_find_acquire_program NAME_AND_VAR) + vcpkg_list(APPEND variables "${NAME_AND_VAR}") + _vcpkg_find_acquire_program("${NAME_AND_VAR}") +endmacro() + +vcpkg_find_acquire_program(BAZEL) +vcpkg_find_acquire_program(BISON) +vcpkg_find_acquire_program(FLEX) +vcpkg_find_acquire_program(GIT) +vcpkg_find_acquire_program(GN) +vcpkg_find_acquire_program(GPERF) +vcpkg_find_acquire_program(NASM) +vcpkg_find_acquire_program(NINJA) +vcpkg_find_acquire_program(PERL) +vcpkg_find_acquire_program(PKGCONFIG) +vcpkg_find_acquire_program(PYTHON3) +vcpkg_find_acquire_program(SCONS) +vcpkg_find_acquire_program(YASM) + +if(NOT VCPKG_HOST_IS_OSX) + vcpkg_find_acquire_program(MESON) # System python too old (3.9; meson needs 3.10) + vcpkg_find_acquire_program(RUBY) + vcpkg_find_acquire_program(SWIG) +endif() + +if(VCPKG_HOST_IS_LINUX) + vcpkg_find_acquire_program(PATCHELF) +endif() + +if(VCPKG_HOST_IS_WINDOWS) + vcpkg_find_acquire_program(7Z) + vcpkg_find_acquire_program(CLANG) + vcpkg_find_acquire_program(DARK) + vcpkg_find_acquire_program(DOXYGEN) + vcpkg_find_acquire_program(GASPREPROCESSOR) + vcpkg_find_acquire_program(GO) + vcpkg_find_acquire_program(JOM) + vcpkg_find_acquire_program(NUGET) + vcpkg_find_acquire_program(PYTHON2) +endif() + +list(SORT variables) +message(STATUS "Collected programs: ${variables}") + +set(missing "") +foreach(variable IN LISTS variables) + set(var_contents "${${variable}}") + list(POP_BACK var_contents program) + if(NOT EXISTS "${program}") + list(APPEND missing "${variable}: ${program}") + endif() + list(POP_FRONT var_contents interpreter) + if(interpreter AND NOT EXISTS "${interpreter}") + list(APPEND missing "${variable} (interpreter): ${interpreter}") + endif() +endforeach() +if(missing) + list(JOIN missing "\n " missing) + message(FATAL_ERROR "The following programs do not exist:\n ${missing}") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/vcpkg.json new file mode 100644 index 0000000..0b622eb --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-find-acquire-program/vcpkg.json @@ -0,0 +1,7 @@ +{ + "name": "vcpkg-find-acquire-program", + "version-string": "0", + "port-version": 2, + "description": "Test port to exercise vcpkg_find_acquire_program", + "supports": "native" +} diff --git a/vcpkg/scripts/test_ports/vcpkg-fix-rpath/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-fix-rpath/portfile.cmake new file mode 100644 index 0000000..532c247 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-fix-rpath/portfile.cmake @@ -0,0 +1,122 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# Test for empty string +set(elf_dir "${CURRENT_PACKAGES_DIR}/lib") +set(test_rpath "") +set(expected "$ORIGIN") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + +# Test for empty string in the tools directory +set(elf_dir "${CURRENT_PACKAGES_DIR}/tools/hdf5") +set(test_rpath "") +set(expected "$ORIGIN:$ORIGIN/../../lib") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + +# Simple replacement and outside path test +set(elf_dir "${CURRENT_PACKAGES_DIR}/lib") +set(test_rpath "${CURRENT_PACKAGES_DIR}/lib:/usr/lib/") +set(expected "$ORIGIN") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + +# Simple pkgconfig path and outside path test +set(elf_dir "${CURRENT_PACKAGES_DIR}/lib/") +set(test_rpath "${CURRENT_INSTALLED_DIR}/lib/pkgconfig/../../lib:/usr/lib/") +set(expected "$ORIGIN") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + +# elf dir in subdir +set(elf_dir "${CURRENT_PACKAGES_DIR}/lib/somesubdir") +set(test_rpath "${CURRENT_INSTALLED_DIR}/lib/pkgconfig/../../lib:/usr/lib/") +set(expected "$ORIGIN:$ORIGIN/..") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + +# Getting more complex +set(elf_dir "${CURRENT_PACKAGES_DIR}/plugins/notlib/extrasubdir") +set(test_rpath "${CURRENT_PACKAGES_DIR}/lib/pkgconfig/../../lib/someotherdir2:${CURRENT_INSTALLED_DIR}/lib/pkgconfig/../../someotherdir1:/usr/lib/") +set(expected "$ORIGIN:$ORIGIN/../../../lib:$ORIGIN/../../../lib/someotherdir2:$ORIGIN/../../../someotherdir1") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() + + +set(X_VCPKG_RPATH_KEEP_SYSTEM_PATHS ON) +# Simple replacement and outside path test +set(elf_dir "${CURRENT_PACKAGES_DIR}/lib") +set(test_rpath "${CURRENT_PACKAGES_DIR}/lib:/usr/lib/") +set(expected "$ORIGIN:/usr/lib") + +z_vcpkg_calculate_corrected_rpath( + ELF_FILE_DIR "${elf_dir}" + ORG_RPATH "${test_rpath}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not agree with expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath agrees with expected rpath: '${new_rpath}' ") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-fix-rpath/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-fix-rpath/vcpkg.json new file mode 100644 index 0000000..c39dc39 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-fix-rpath/vcpkg.json @@ -0,0 +1,6 @@ +{ + "name": "vcpkg-fix-rpath", + "version-date": "2024-02-10", + "description": "Test port to check the string replacement in z_vcpkg_fixup_rpath", + "supports": "native & linux" +} diff --git a/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/portfile.cmake new file mode 100644 index 0000000..6754431 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/portfile.cmake @@ -0,0 +1,65 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +# Test for empty string +set(macho_dir "${CURRENT_PACKAGES_DIR}/lib") +set(test_rpath "") +set(expected "@loader_path") + +z_vcpkg_calculate_corrected_macho_rpath( + MACHO_FILE_DIR "${macho_dir}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not match expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath matches expected rpath: '${new_rpath}' ") +endif() + +# Test for empty string in the tools directory +set(macho_dir "${CURRENT_PACKAGES_DIR}/tools/hdf5") +set(test_rpath "") +set(expected "@loader_path/../../lib") + +z_vcpkg_calculate_corrected_macho_rpath( + MACHO_FILE_DIR "${macho_dir}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not match expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath matches expected rpath: '${new_rpath}' ") +endif() + +# macho dir in subdir +set(macho_dir "${CURRENT_PACKAGES_DIR}/lib/somesubdir") +set(test_rpath "") +set(expected "@loader_path/..") + +z_vcpkg_calculate_corrected_macho_rpath( + MACHO_FILE_DIR "${macho_dir}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath for '${macho_dir}' does not match expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath matches expected rpath: '${new_rpath}' ") +endif() + +# Getting more complex +set(macho_dir "${CURRENT_PACKAGES_DIR}/plugins/notlib/extrasubdir") +set(test_rpath "") +set(expected "@loader_path/../../../lib") + +z_vcpkg_calculate_corrected_macho_rpath( + MACHO_FILE_DIR "${macho_dir}" + OUT_NEW_RPATH_VAR new_rpath +) + +if(NOT "x${new_rpath}x" STREQUAL "x${expected}x") + message(FATAL_ERROR "--- Calculated rpath does not match expected rpath: '${new_rpath}' != '${expected}' ") +else() + message(STATUS "--- Calculated rpath matches expected rpath: '${new_rpath}' ") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/vcpkg.json new file mode 100644 index 0000000..17d7c76 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-fixup-macho-rpath/vcpkg.json @@ -0,0 +1,6 @@ +{ + "name": "vcpkg-fixup-macho-rpath", + "version-date": "2024-06-15", + "description": "Test port to check the string replacement in z_vcpkg_fixup_macho_rpath", + "supports": "native & osx" +} diff --git a/vcpkg/scripts/test_ports/vcpkg-from-git-test/portfile.cmake b/vcpkg/scripts/test_ports/vcpkg-from-git-test/portfile.cmake new file mode 100644 index 0000000..841a6e2 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-from-git-test/portfile.cmake @@ -0,0 +1,378 @@ +set(VCPKG_POLICY_EMPTY_PACKAGE enabled) + +set(git_test_repo "${CURRENT_BUILDTREES_DIR}/test-git-repo") +file(REMOVE_RECURSE "${git_test_repo}") + +# LFS expects a URL for a local repository +set(git_remote "file:///${git_test_repo}") + +message(STATUS "Creating test git repository") +vcpkg_find_acquire_program(GIT) +vcpkg_list(SET git_config + -c core.autocrlf=false + -c user.email=vcpkg@example.com + -c user.name=vcpkg +) + +vcpkg_list(SET git ${GIT} ${git_config}) + +vcpkg_execute_required_process( + COMMAND ${git} init "test-git-repo" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "git-init" +) +vcpkg_execute_required_process( + COMMAND ${git} config uploadpack.allowReachableSHA1InWant true + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-config" +) +vcpkg_execute_required_process( + COMMAND ${git} checkout -b main + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-new-branch" +) + +file(WRITE "${git_test_repo}/README.txt" "first commit") +vcpkg_execute_required_process( + COMMAND ${git} add "README.txt" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-add.1" +) +vcpkg_execute_required_process( + COMMAND ${git} commit -m "first commit" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-commit.1" +) +vcpkg_execute_in_download_mode( + COMMAND ${git} rev-parse HEAD + OUTPUT_VARIABLE ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" +) +if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to rev-parse HEAD: ${error_code}") +endif() +string(STRIP "${ref}" ref) + +file(WRITE "${git_test_repo}/README.txt" "second commit") +vcpkg_execute_required_process( + COMMAND ${git} add "README.txt" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-add.2" +) +vcpkg_execute_required_process( + COMMAND ${git} commit -m "second commit" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-commit.2" +) +vcpkg_execute_in_download_mode( + COMMAND ${git} rev-parse HEAD + OUTPUT_VARIABLE head_ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" +) +if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to rev-parse HEAD: ${error_code}") +endif() +string(STRIP "${head_ref}" head_ref) + +message(STATUS "Testing regular mode") +set(VCPKG_USE_HEAD_VERSION OFF) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "first commit") + message(FATAL_ERROR "Failed to checkout the first commit. Contents were: +${contents} +") +endif() + +message(STATUS "Testing regular mode that happens to match HEAD") +set(VCPKG_USE_HEAD_VERSION OFF) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${head_ref}" + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "second commit") + message(FATAL_ERROR "Failed to checkout the second commit. Contents were: +${contents} +") +endif() + +message(STATUS "Testing regular mode with FETCH_REF") +vcpkg_execute_required_process( + COMMAND ${git} config uploadpack.allowReachableSHA1InWant false + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-config" +) +set(VCPKG_USE_HEAD_VERSION OFF) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + FETCH_REF main + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "first commit") + message(FATAL_ERROR "Failed to checkout the first commit. Contents were: +${contents} +") +endif() + +message(STATUS "Testing regular mode with FETCH_REF that happens to match HEAD") +set(VCPKG_USE_HEAD_VERSION OFF) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${head_ref}" + FETCH_REF main + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "second commit") + message(FATAL_ERROR "Failed to checkout the second commit. Contents were: +${contents} +") +endif() + +vcpkg_execute_required_process( + COMMAND ${git} config uploadpack.allowReachableSHA1InWant true + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-config" +) + +message(STATUS "Testing head mode") +set(VCPKG_USE_HEAD_VERSION ON) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "second commit") + message(FATAL_ERROR "Failed to checkout the HEAD commit. Contents were: +${contents} +") +endif() +if(NOT "${VCPKG_HEAD_VERSION}" STREQUAL "${head_ref}") + message(FATAL_ERROR "Failed to checkout the right HEAD commit. + Expected: ${head_ref} + Actual : ${VCPKG_HEAD_VERSION} +") +endif() + +message(STATUS "Testing head mode + no HEAD_REF -> just uses REF") +set(VCPKG_USE_HEAD_VERSION ON) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "first commit") + message(FATAL_ERROR "Failed to checkout the regular commit. Contents were: +${contents} +") +endif() + +message(STATUS "Testing new head ref") +file(WRITE "${git_test_repo}/README.txt" "third commit") +vcpkg_execute_required_process( + COMMAND ${git} add "README.txt" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git.7" +) +vcpkg_execute_required_process( + COMMAND ${git} commit -m "second commit" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git.8" +) +vcpkg_execute_in_download_mode( + COMMAND ${git} rev-parse HEAD + OUTPUT_VARIABLE new_head_ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" +) +if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to rev-parse HEAD: ${error_code}") +endif() +string(STRIP "${new_head_ref}" new_head_ref) + +set(VCPKG_USE_HEAD_VERSION ON) +vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + HEAD_REF main +) +file(READ "${source_path}/README.txt" contents) +if(NOT "${contents}" STREQUAL "third commit") + message(FATAL_ERROR "Failed to checkout the right HEAD commit. Contents were: +${contents} +") +endif() +if(NOT "${VCPKG_HEAD_VERSION}" STREQUAL "${new_head_ref}") + message(FATAL_ERROR "Failed to checkout the right HEAD commit. + Expected: ${new_head_ref} + Actual : ${VCPKG_HEAD_VERSION} +") +endif() + +message(STATUS "Testing LFS support") +vcpkg_execute_in_download_mode( + COMMAND "${GIT}" lfs --version + OUTPUT_VARIABLE lfs_version_output + ERROR_VARIABLE lfs_version_error + RESULT_VARIABLE lfs_version_result + WORKING_DIRECTORY "${git_test_repo}" +) +if(NOT lfs_version_result) + vcpkg_execute_required_process( + COMMAND ${git} lfs install --local + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-lfs-install" + ) + file(WRITE "${git_test_repo}/.gitattributes" "* text=auto\n*.bin filter=lfs diff=lfs merge=lfs -text\n") + + message(STATUS "Testing fetching with the same Git and LFS urls") + file(WRITE "${git_test_repo}/lfs_file.bin" "fourth commit") + vcpkg_execute_required_process( + COMMAND ${git} add ".gitattributes" "lfs_file.bin" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-lfs-add" + ) + vcpkg_execute_required_process( + COMMAND ${git} commit -m "fourth commit" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-lfs-commit" + ) + vcpkg_execute_in_download_mode( + COMMAND ${git} rev-parse HEAD + OUTPUT_VARIABLE ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" + ) + if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to rev-parse HEAD: ${error_code}") + endif() + string(STRIP "${ref}" ref) + + vcpkg_execute_in_download_mode( + COMMAND ${git} lfs ls-files --name-only + OUTPUT_VARIABLE lfs_files + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" + ) + if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed lfs ls-files: ${error_code}") + endif() + string(STRIP "${lfs_files}" lfs_files) + if(NOT "${lfs_files}" MATCHES [[lfs_file\.bin]]) + message(FATAL_ERROR "File was not added to LFS") + endif() + + set(VCPKG_USE_HEAD_VERSION OFF) + vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + HEAD_REF main + LFS + ) + file(READ "${source_path}/lfs_file.bin" contents) + if(NOT "${contents}" STREQUAL "fourth commit") + message(FATAL_ERROR "Failed to checkout the fourth commit. Contents were: +${contents} + ") + endif() + + message(STATUS "Testing fetching from different Git and LFS urls") + # requires LFS 3.0.0 or later for "--force" on prune + string(REGEX MATCH "git-lfs/([0-9\\.]+) " lfs_version "${lfs_version_output}") + set(lfs_version "${CMAKE_MATCH_1}") + if(lfs_version VERSION_GREATER_EQUAL "3.0.0") + file(WRITE "${git_test_repo}/lfs_file2.bin" "fifth commit") + vcpkg_execute_required_process( + COMMAND ${git} add "lfs_file2.bin" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-lfs-add.2" + ) + vcpkg_execute_required_process( + COMMAND ${git} commit -m "fifth commit" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-lfs-commit.2" + ) + vcpkg_execute_in_download_mode( + COMMAND ${git} rev-parse HEAD + OUTPUT_VARIABLE ref + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" + ) + if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to rev-parse HEAD: ${error_code}") + endif() + string(STRIP "${ref}" ref) + + set(git_test_repo_2 "${CURRENT_BUILDTREES_DIR}/test-git-repo-2") + file(REMOVE_RECURSE "${git_test_repo_2}") + set(git_remote_2 "file:///${git_test_repo_2}") + vcpkg_execute_required_process( + COMMAND ${git} init --bare "test-git-repo-2" + WORKING_DIRECTORY "${CURRENT_BUILDTREES_DIR}" + LOGNAME "git-init.2" + ) + # note: LFS won't prune "unpushed" files, which is checked using the "origin" remote by default. + # If there is no remote then files are never considered to be "pushed", and so are never pruned. + vcpkg_execute_required_process( + COMMAND ${git} remote add origin "${git_remote_2}" + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-remote-add" + ) + vcpkg_execute_required_process( + COMMAND ${git} push --all origin + WORKING_DIRECTORY "${git_test_repo}" + LOGNAME "git-push" + ) + + vcpkg_execute_in_download_mode( + COMMAND ${git} lfs prune --force --verbose + OUTPUT_VARIABLE lfs_prune + RESULT_VARIABLE error_code + WORKING_DIRECTORY "${git_test_repo}" + ) + if(NOT "${error_code}" EQUAL "0") + message(FATAL_ERROR "Failed to prune LFS files: ${error_code}") + endif() + if(NOT "${lfs_prune}" MATCHES "0 retained") + message(FATAL_ERROR "LFS prune did not delete all files:\n${lfs_prune}") + endif() + + set(VCPKG_USE_HEAD_VERSION OFF) + vcpkg_from_git( + OUT_SOURCE_PATH source_path + URL "${git_remote}" + REF "${ref}" + HEAD_REF main + LFS "${git_remote_2}" + ) + file(READ "${source_path}/lfs_file2.bin" contents) + if(NOT "${contents}" STREQUAL "fifth commit") + message(FATAL_ERROR "Failed to checkout the fifth commit. Contents were: + ${contents} + ") + endif() + else() + message(NOTICE "Git LFS version is older than 3.0.0: some tests were skipped") + endif() +else() + message(NOTICE "Git LFS is not available: some tests were skipped") +endif() diff --git a/vcpkg/scripts/test_ports/vcpkg-from-git-test/vcpkg.json b/vcpkg/scripts/test_ports/vcpkg-from-git-test/vcpkg.json new file mode 100644 index 0000000..609e7f3 --- /dev/null +++ b/vcpkg/scripts/test_ports/vcpkg-from-git-test/vcpkg.json @@ -0,0 +1,4 @@ +{ + "name": "vcpkg-from-git-test", + "version": "0" +} diff --git a/vcpkg/scripts/toolchains/android.cmake b/vcpkg/scripts/toolchains/android.cmake new file mode 100644 index 0000000..3ec3391 --- /dev/null +++ b/vcpkg/scripts/toolchains/android.cmake @@ -0,0 +1,78 @@ +set(ANDROID_CPP_FEATURES "rtti exceptions" CACHE STRING "")
+set(CMAKE_SYSTEM_NAME Android CACHE STRING "")
+set(ANDROID_TOOLCHAIN clang CACHE STRING "")
+set(ANDROID_NATIVE_API_LEVEL ${CMAKE_SYSTEM_VERSION} CACHE STRING "")
+if(CMAKE_SYSTEM_VERSION MATCHES "^[0-9]+$")
+ set(ANDROID_PLATFORM android-${CMAKE_SYSTEM_VERSION} CACHE STRING "")
+else()
+ set(ANDROID_PLATFORM ${CMAKE_SYSTEM_VERSION} CACHE STRING "")
+endif()
+set(CMAKE_ANDROID_NDK_TOOLCHAIN_VERSION clang CACHE STRING "")
+
+if (VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ set(ANDROID_STL c++_shared CACHE STRING "")
+else()
+ set(ANDROID_STL c++_static CACHE STRING "")
+endif()
+
+if(DEFINED ENV{ANDROID_NDK_HOME})
+ set(ANDROID_NDK_HOME $ENV{ANDROID_NDK_HOME})
+else()
+ set(ANDROID_NDK_HOME "$ENV{ProgramData}/Microsoft/AndroidNDK64/android-ndk-r13b/")
+ if(NOT EXISTS "${ANDROID_NDK_HOME}")
+ # Use Xamarin default installation folder
+ set(ANDROID_NDK_HOME "$ENV{ProgramFiles\(x86\)}/Android/android-sdk/ndk-bundle")
+ endif()
+endif()
+
+if(NOT EXISTS "${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake")
+ message(FATAL_ERROR "Could not find android ndk. Searched at ${ANDROID_NDK_HOME}")
+endif()
+
+include("${ANDROID_NDK_HOME}/build/cmake/android.toolchain.cmake")
+
+# find_library must ignore host libs
+if(ANDROID_TOOLCHAIN_ROOT AND EXISTS "${ANDROID_TOOLCHAIN_ROOT}/lib")
+ list(APPEND CMAKE_SYSTEM_IGNORE_PATH "${ANDROID_TOOLCHAIN_ROOT}/lib")
+endif()
+
+if(NOT _VCPKG_ANDROID_TOOLCHAIN)
+ set(_VCPKG_ANDROID_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ string(APPEND CMAKE_C_FLAGS " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/freebsd.cmake b/vcpkg/scripts/toolchains/freebsd.cmake new file mode 100644 index 0000000..5ae16c6 --- /dev/null +++ b/vcpkg/scripts/toolchains/freebsd.cmake @@ -0,0 +1,56 @@ +if(NOT _VCPKG_FREEBSD_TOOLCHAIN)
+ set(_VCPKG_FREEBSD_TOOLCHAIN 1)
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "FreeBSD")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+ set(CMAKE_SYSTEM_NAME FreeBSD CACHE STRING "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/ios.cmake b/vcpkg/scripts/toolchains/ios.cmake new file mode 100644 index 0000000..f48b990 --- /dev/null +++ b/vcpkg/scripts/toolchains/ios.cmake @@ -0,0 +1,83 @@ +if(NOT _VCPKG_IOS_TOOLCHAIN)
+ set(_VCPKG_IOS_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ # Set the CMAKE_SYSTEM_NAME for try_compile calls.
+ set(CMAKE_SYSTEM_NAME iOS CACHE STRING "")
+
+ macro(_vcpkg_setup_ios_arch arch)
+ unset(_vcpkg_ios_system_processor)
+ unset(_vcpkg_ios_sysroot)
+ unset(_vcpkg_ios_target_architecture)
+
+ if ("${arch}" STREQUAL "arm64")
+ set(_vcpkg_ios_system_processor "aarch64")
+ set(_vcpkg_ios_target_architecture "arm64")
+ elseif("${arch}" STREQUAL "arm64_32")
+ set(_vcpkg_ios_system_processor "aarch64")
+ set(_vcpkg_ios_target_architecture "arm64_32")
+ elseif("${arch}" STREQUAL "arm")
+ set(_vcpkg_ios_system_processor "arm")
+ set(_vcpkg_ios_target_architecture "armv7")
+ elseif("${arch}" STREQUAL "x64")
+ set(_vcpkg_ios_system_processor "x86_64")
+ set(_vcpkg_ios_sysroot "iphonesimulator")
+ set(_vcpkg_ios_target_architecture "x86_64")
+ elseif("${arch}" STREQUAL "x86")
+ set(_vcpkg_ios_system_processor "i386")
+ set(_vcpkg_ios_sysroot "iphonesimulator")
+ set(_vcpkg_ios_target_architecture "i386")
+ else()
+ message(FATAL_ERROR
+ "Unknown VCPKG_TARGET_ARCHITECTURE value provided for triplet ${VCPKG_TARGET_TRIPLET}: ${arch}")
+ endif()
+ endmacro()
+
+ _vcpkg_setup_ios_arch("${VCPKG_TARGET_ARCHITECTURE}")
+ if(_vcpkg_ios_system_processor AND NOT CMAKE_SYSTEM_PROCESSOR)
+ set(CMAKE_SYSTEM_PROCESSOR ${_vcpkg_ios_system_processor})
+ endif()
+
+ # If VCPKG_OSX_ARCHITECTURES or VCPKG_OSX_SYSROOT is set in the triplet, they will take priority,
+ # so the following will be no-ops.
+ set(CMAKE_OSX_ARCHITECTURES "${_vcpkg_ios_target_architecture}" CACHE STRING "Build architectures for iOS")
+ if(_vcpkg_ios_sysroot)
+ set(CMAKE_OSX_SYSROOT ${_vcpkg_ios_sysroot} CACHE STRING "iOS sysroot")
+ endif()
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/linux.cmake b/vcpkg/scripts/toolchains/linux.cmake new file mode 100644 index 0000000..f309ae3 --- /dev/null +++ b/vcpkg/scripts/toolchains/linux.cmake @@ -0,0 +1,115 @@ +if(NOT _VCPKG_LINUX_TOOLCHAIN)
+ set(_VCPKG_LINUX_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ set(CMAKE_SYSTEM_NAME Linux CACHE STRING "")
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR i686 CACHE STRING "")
+ string(APPEND VCPKG_C_FLAGS " -m32")
+ string(APPEND VCPKG_CXX_FLAGS " -m32")
+ string(APPEND VCPKG_LINKER_FLAGS " -m32")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(CMAKE_SYSTEM_PROCESSOR armv7l CACHE STRING "")
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "armv7l")
+
+ if(NOT DEFINED CMAKE_CXX_COMPILER)
+ set(CMAKE_CXX_COMPILER "arm-linux-gnueabihf-g++")
+ endif()
+ if(NOT DEFINED CMAKE_C_COMPILER)
+ set(CMAKE_C_COMPILER "arm-linux-gnueabihf-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM_COMPILER)
+ set(CMAKE_ASM_COMPILER "arm-linux-gnueabihf-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM-ATT_COMPILER)
+ set(CMAKE_ASM-ATT_COMPILER "arm-linux-gnueabihf-as")
+ endif()
+ message(STATUS "Cross compiling arm on host ${CMAKE_HOST_SYSTEM_PROCESSOR}, use cross compiler: ${CMAKE_CXX_COMPILER}/${CMAKE_C_COMPILER}")
+ endif()
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR aarch64 CACHE STRING "")
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "aarch64")
+
+ if(NOT DEFINED CMAKE_CXX_COMPILER)
+ set(CMAKE_CXX_COMPILER "aarch64-linux-gnu-g++")
+ endif()
+ if(NOT DEFINED CMAKE_C_COMPILER)
+ set(CMAKE_C_COMPILER "aarch64-linux-gnu-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM_COMPILER)
+ set(CMAKE_ASM_COMPILER "aarch64-linux-gnu-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM-ATT_COMPILER)
+ set(CMAKE_ASM-ATT_COMPILER "aarch64-linux-gnu-as")
+ endif()
+ message(STATUS "Cross compiling arm64 on host ${CMAKE_HOST_SYSTEM_PROCESSOR}, use cross compiler: ${CMAKE_CXX_COMPILER}/${CMAKE_C_COMPILER}")
+ endif()
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "riscv64")
+ set(CMAKE_SYSTEM_PROCESSOR riscv64 CACHE STRING "")
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND NOT CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "riscv64")
+
+ if(NOT DEFINED CMAKE_CXX_COMPILER)
+ set(CMAKE_CXX_COMPILER "riscv64-linux-gnu-g++")
+ endif()
+ if(NOT DEFINED CMAKE_C_COMPILER)
+ set(CMAKE_C_COMPILER "riscv64-linux-gnu-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM_COMPILER)
+ set(CMAKE_ASM_COMPILER "riscv64-linux-gnu-gcc")
+ endif()
+ if(NOT DEFINED CMAKE_ASM-ATT_COMPILER)
+ set(CMAKE_ASM-ATT_COMPILER "riscv64-linux-gnu-as")
+ endif()
+ message(STATUS "Cross compiling riscv64 on host ${CMAKE_HOST_SYSTEM_PROCESSOR}, use cross compiler: ${CMAKE_CXX_COMPILER}/${CMAKE_C_COMPILER}")
+ endif()
+
+ endif()
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux" AND CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR)
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ if(VCPKG_CRT_LINKAGE STREQUAL "static")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT "-static ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT "-static ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-static ")
+ endif()
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_ASM_FLAGS_INIT " ${VCPKG_C_FLAGS} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/mingw.cmake b/vcpkg/scripts/toolchains/mingw.cmake new file mode 100644 index 0000000..6e1b541 --- /dev/null +++ b/vcpkg/scripts/toolchains/mingw.cmake @@ -0,0 +1,74 @@ +if(NOT _VCPKG_MINGW_TOOLCHAIN)
+ set(_VCPKG_MINGW_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+
+ # Need to override MinGW from VCPKG_CMAKE_SYSTEM_NAME
+ set(CMAKE_SYSTEM_NAME Windows CACHE STRING "" FORCE)
+
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR i686 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(CMAKE_SYSTEM_PROCESSOR armv7 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR aarch64 CACHE STRING "")
+ endif()
+
+ foreach(lang C CXX)
+ set(CMAKE_${lang}_COMPILER_TARGET "${CMAKE_SYSTEM_PROCESSOR}-w64-windows-gnu" CACHE STRING "")
+ endforeach()
+
+ find_program(CMAKE_C_COMPILER "${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-gcc")
+ find_program(CMAKE_CXX_COMPILER "${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-g++")
+ find_program(CMAKE_RC_COMPILER "${CMAKE_SYSTEM_PROCESSOR}-w64-mingw32-windres")
+ if(NOT CMAKE_RC_COMPILER)
+ find_program(CMAKE_RC_COMPILER "windres")
+ endif()
+
+ string(APPEND CMAKE_C_FLAGS_INIT " ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ if(VCPKG_CRT_LINKAGE STREQUAL "static")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT "-static ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT "-static ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT "-static ")
+ endif()
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
+
diff --git a/vcpkg/scripts/toolchains/netbsd.cmake b/vcpkg/scripts/toolchains/netbsd.cmake new file mode 100644 index 0000000..a6a03af --- /dev/null +++ b/vcpkg/scripts/toolchains/netbsd.cmake @@ -0,0 +1,56 @@ +if(NOT _VCPKG_NETBSD_TOOLCHAIN)
+ set(_VCPKG_NETBSD_TOOLCHAIN 1)
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "NetBSD")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+ set(CMAKE_SYSTEM_NAME NetBSD CACHE STRING "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/openbsd.cmake b/vcpkg/scripts/toolchains/openbsd.cmake new file mode 100644 index 0000000..f500bab --- /dev/null +++ b/vcpkg/scripts/toolchains/openbsd.cmake @@ -0,0 +1,64 @@ +if(NOT _VCPKG_OPENBSD_TOOLCHAIN)
+ set(_VCPKG_OPENBSD_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "OpenBSD")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+ set(CMAKE_SYSTEM_NAME OpenBSD CACHE STRING "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(NOT DEFINED CMAKE_CXX_COMPILER)
+ set(CMAKE_CXX_COMPILER "/usr/bin/clang++")
+ endif()
+ if(NOT DEFINED CMAKE_C_COMPILER)
+ set(CMAKE_C_COMPILER "/usr/bin/clang")
+ endif()
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif(NOT _VCPKG_OPENBSD_TOOLCHAIN)
diff --git a/vcpkg/scripts/toolchains/osx.cmake b/vcpkg/scripts/toolchains/osx.cmake new file mode 100644 index 0000000..8b54d4e --- /dev/null +++ b/vcpkg/scripts/toolchains/osx.cmake @@ -0,0 +1,73 @@ +if(NOT _VCPKG_OSX_TOOLCHAIN)
+ set(_VCPKG_OSX_TOOLCHAIN 1)
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ set(CMAKE_SYSTEM_NAME Darwin CACHE STRING "")
+
+ set(CMAKE_MACOSX_RPATH ON CACHE BOOL "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR x86_64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}" CACHE STRING "" FORCE)
+ endif()
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Darwin")
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR)
+ set(CMAKE_CROSSCOMPILING OFF CACHE STRING "")
+ elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64")
+ # arm64 macOS can run x64 binaries
+ set(CMAKE_CROSSCOMPILING OFF CACHE STRING "")
+ endif()
+
+ if(NOT DEFINED CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}" CACHE STRING "")
+ endif()
+ endif()
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/solaris.cmake b/vcpkg/scripts/toolchains/solaris.cmake new file mode 100644 index 0000000..c1fc0aa --- /dev/null +++ b/vcpkg/scripts/toolchains/solaris.cmake @@ -0,0 +1,57 @@ +if(NOT _VCPKG_SOLARIS_TOOLCHAIN)
+ set(_VCPKG_SOLARIS_TOOLCHAIN 1)
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "SunOS")
+ set(CMAKE_CROSSCOMPILING OFF CACHE BOOL "")
+ endif()
+ set(CMAKE_SYSTEM_NAME SunOS CACHE STRING "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_PROCESSOR)
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR amd64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR i386 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR arm64 CACHE STRING "")
+ else()
+ set(CMAKE_SYSTEM_PROCESSOR "${CMAKE_HOST_SYSTEM_PROCESSOR}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ )
+
+ string(APPEND CMAKE_C_FLAGS_INIT " -fPIC ${VCPKG_C_FLAGS} ")
+ string(APPEND CMAKE_CXX_FLAGS_INIT " -fPIC ${VCPKG_CXX_FLAGS} ")
+ string(APPEND CMAKE_C_FLAGS_DEBUG_INIT " ${VCPKG_C_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_CXX_FLAGS_DEBUG_INIT " ${VCPKG_CXX_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_C_FLAGS_RELEASE_INIT " ${VCPKG_C_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_CXX_FLAGS_RELEASE_INIT " ${VCPKG_CXX_FLAGS_RELEASE} ")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_INIT " ${VCPKG_LINKER_FLAGS} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_RELEASE_INIT " ${VCPKG_LINKER_FLAGS_RELEASE} ")
+ string(APPEND CMAKE_ASM_FLAGS_INIT " ${VCPKG_C_FLAGS} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/uwp.cmake b/vcpkg/scripts/toolchains/uwp.cmake new file mode 100644 index 0000000..f5f24c1 --- /dev/null +++ b/vcpkg/scripts/toolchains/uwp.cmake @@ -0,0 +1,119 @@ +if(NOT _VCPKG_WINDOWS_TOOLCHAIN)
+ set(_VCPKG_WINDOWS_TOOLCHAIN 1)
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<STREQUAL:${VCPKG_CRT_LINKAGE},dynamic>:DLL>" CACHE STRING "")
+ set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "")
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE VCPKG_SET_CHARSET_FLAG
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ VCPKG_PLATFORM_TOOLSET
+ )
+
+ set(CMAKE_SYSTEM_NAME WindowsStore CACHE STRING "")
+
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR AMD64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(CMAKE_SYSTEM_PROCESSOR ARM CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR ARM64 CACHE STRING "")
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}" CACHE STRING "" FORCE)
+ endif()
+
+ set(CMAKE_CROSSCOMPILING ON CACHE STRING "")
+
+ if(NOT DEFINED CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}" CACHE STRING "")
+ endif()
+
+ if(NOT (DEFINED VCPKG_MSVC_CXX_WINRT_EXTENSIONS))
+ set(VCPKG_MSVC_CXX_WINRT_EXTENSIONS ON)
+ endif()
+
+ if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MD")
+ elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MT")
+ else()
+ message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
+ endif()
+
+ set(CHARSET_FLAG "/utf-8")
+ if (NOT VCPKG_SET_CHARSET_FLAG OR VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ # VS 2013 does not support /utf-8
+ set(CHARSET_FLAG "")
+ endif()
+
+ set(MP_BUILD_FLAG "")
+ if(NOT (CMAKE_CXX_COMPILER MATCHES "clang-cl.exe"))
+ set(MP_BUILD_FLAG "/MP ")
+ endif()
+
+ set(_vcpkg_cpp_flags "/DWIN32 /D_WINDOWS /D_UNICODE /DUNICODE /DWINAPI_FAMILY=WINAPI_FAMILY_APP /D__WRL_NO_DEFAULT_LIB__" ) # VS adds /D "_WINDLL" for DLLs;
+ set(_vcpkg_common_flags "/nologo /Z7 ${MP_BUILD_FLAG}/GS /Gd /Gm- /W3 /WX- /Zc:wchar_t /Zc:inline /Zc:forScope /fp:precise /Oy- /EHsc")
+ #/ZW:nostdlib -> ZW is added by CMake # VS also normally adds /sdl but not cmake MSBUILD
+ set(_vcpkg_winmd_flag "")
+ if(VCPKG_MSVC_CXX_WINRT_EXTENSIONS)
+ file(TO_CMAKE_PATH "$ENV{VCToolsInstallDir}" _vcpkg_vctools)
+ set(ENV{_CL_} "/FU\"${_vcpkg_vctools}/lib/x86/store/references/platform.winmd\" $ENV{_CL_}")
+ # CMake has problems to correctly pass this in the compiler test so probably need special care in get_cmake_vars
+ #set(_vcpkg_winmd_flag "/FU\\\\\"${_vcpkg_vctools}/lib/x86/store/references/platform.winmd\\\\\"") # VS normally passes /ZW for Apps
+ endif()
+
+ set(CMAKE_CXX_FLAGS "${_vcpkg_cpp_flags} ${_vcpkg_common_flags} ${_vcpkg_winmd_flag} ${CHARSET_FLAG} ${VCPKG_CXX_FLAGS}" CACHE STRING "")
+ set(CMAKE_C_FLAGS "${_vcpkg_cpp_flags} ${_vcpkg_common_flags} ${_vcpkg_winmd_flag} ${CHARSET_FLAG} ${VCPKG_C_FLAGS}" CACHE STRING "")
+ set(CMAKE_RC_FLAGS "-c65001 ${_vcpkg_cpp_flags}" CACHE STRING "")
+
+ unset(CHARSET_FLAG)
+ unset(MP_BUILD_FLAG)
+ unset(_vcpkg_cpp_flags)
+ unset(_vcpkg_common_flags)
+ unset(_vcpkg_winmd_flag)
+
+ set(CMAKE_CXX_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}" CACHE STRING "")
+
+ set(CMAKE_CXX_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "") # VS adds /GL
+ set(CMAKE_C_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_C_FLAGS_RELEASE}" CACHE STRING "")
+
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_RELEASE_INIT " /nologo ") # VS adds /LTCG
+
+ if(VCPKG_MSVC_CXX_WINRT_EXTENSIONS)
+ set(additional_dll_flags "/WINMD:NO ")
+ if(CMAKE_GENERATOR MATCHES "Ninja")
+ set(additional_exe_flags "/WINMD ") # VS Generator chokes on this in the compiler detection
+ endif()
+ endif()
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS " /MANIFEST:NO /NXCOMPAT /DYNAMICBASE /DEBUG ${additional_dll_flags}/APPCONTAINER /SUBSYSTEM:CONSOLE /MANIFESTUAC:NO ${VCPKG_LINKER_FLAGS}")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS " /MANIFEST:NO /NXCOMPAT /DYNAMICBASE /DEBUG ${additional_dll_flags}/APPCONTAINER /SUBSYSTEM:CONSOLE /MANIFESTUAC:NO ${VCPKG_LINKER_FLAGS}")
+ # VS adds /DEBUG:FULL /TLBID:1. WindowsApp.lib is in CMAKE_C|CXX_STANDARD_LIBRARIES
+ string(APPEND CMAKE_EXE_LINKER_FLAGS " /MANIFEST:NO /NXCOMPAT /DYNAMICBASE /DEBUG ${additional_exe_flags}/APPCONTAINER /MANIFESTUAC:NO ${VCPKG_LINKER_FLAGS}")
+
+ set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "") # VS uses /LTCG:incremental
+ set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "") # VS uses /LTCG:incremental
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "")
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG_INIT " /nologo ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " /nologo ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " /nologo ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+endif()
diff --git a/vcpkg/scripts/toolchains/windows.cmake b/vcpkg/scripts/toolchains/windows.cmake new file mode 100644 index 0000000..3cc90cc --- /dev/null +++ b/vcpkg/scripts/toolchains/windows.cmake @@ -0,0 +1,105 @@ +if(NOT _VCPKG_WINDOWS_TOOLCHAIN)
+ set(_VCPKG_WINDOWS_TOOLCHAIN 1)
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<STREQUAL:${VCPKG_CRT_LINKAGE},dynamic>:DLL>" CACHE STRING "")
+ set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "")
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE VCPKG_SET_CHARSET_FLAG
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ VCPKG_PLATFORM_TOOLSET
+ )
+
+ set(CMAKE_SYSTEM_NAME Windows CACHE STRING "")
+
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x86")
+ set(CMAKE_SYSTEM_PROCESSOR x86 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR AMD64 CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm")
+ set(CMAKE_SYSTEM_PROCESSOR ARM CACHE STRING "")
+ elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64")
+ set(CMAKE_SYSTEM_PROCESSOR ARM64 CACHE STRING "")
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}" CACHE STRING "" FORCE)
+ endif()
+
+ if(CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
+ if(CMAKE_SYSTEM_PROCESSOR STREQUAL CMAKE_HOST_SYSTEM_PROCESSOR)
+ set(CMAKE_CROSSCOMPILING OFF CACHE STRING "")
+ elseif(CMAKE_SYSTEM_PROCESSOR STREQUAL "x86")
+ # any of the four platforms can run x86 binaries
+ set(CMAKE_CROSSCOMPILING OFF CACHE STRING "")
+ elseif(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "ARM64")
+ # arm64 can run binaries of any of the four platforms after Windows 11
+ set(CMAKE_CROSSCOMPILING OFF CACHE STRING "")
+ endif()
+
+ if(NOT DEFINED CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${CMAKE_HOST_SYSTEM_VERSION}" CACHE STRING "")
+ endif()
+ endif()
+
+ if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MD")
+ elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MT")
+ else()
+ message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
+ endif()
+
+ set(CHARSET_FLAG "/utf-8")
+ if (NOT VCPKG_SET_CHARSET_FLAG OR VCPKG_PLATFORM_TOOLSET MATCHES "v120")
+ # VS 2013 does not support /utf-8
+ set(CHARSET_FLAG "")
+ endif()
+
+ set(MP_BUILD_FLAG "")
+ if(NOT (CMAKE_CXX_COMPILER MATCHES "clang-cl.exe"))
+ set(MP_BUILD_FLAG "/MP ")
+ endif()
+
+ set(CMAKE_CXX_FLAGS " /nologo /DWIN32 /D_WINDOWS ${CHARSET_FLAG} /GR /EHsc ${MP_BUILD_FLAG}${VCPKG_CXX_FLAGS}" CACHE STRING "")
+ set(CMAKE_C_FLAGS " /nologo /DWIN32 /D_WINDOWS ${CHARSET_FLAG} ${MP_BUILD_FLAG}${VCPKG_C_FLAGS}" CACHE STRING "")
+
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "arm64ec")
+ string(APPEND CMAKE_CXX_FLAGS " /arm64EC /D_AMD64_ /DAMD64 /D_ARM64EC_ /DARM64EC")
+ string(APPEND CMAKE_C_FLAGS " /arm64EC /D_AMD64_ /DAMD64 /D_ARM64EC_ /DARM64EC")
+ endif()
+ set(CMAKE_RC_FLAGS "-c65001 /DWIN32" CACHE STRING "")
+
+ set(CMAKE_CXX_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Z7 /Ob0 /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Z7 /Ob0 /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_CXX_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG /Z7 ${VCPKG_C_FLAGS_RELEASE}" CACHE STRING "")
+
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_RELEASE_INIT " /nologo ")
+ set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "")
+ set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE}" CACHE STRING "")
+
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG_INIT " /nologo ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+
+ unset(CHARSET_FLAG)
+ unset(MP_BUILD_FLAG)
+ unset(VCPKG_CRT_LINK_FLAG_PREFIX)
+endif()
diff --git a/vcpkg/scripts/toolchains/xbox.cmake b/vcpkg/scripts/toolchains/xbox.cmake new file mode 100644 index 0000000..414ccd9 --- /dev/null +++ b/vcpkg/scripts/toolchains/xbox.cmake @@ -0,0 +1,182 @@ +if(NOT _VCPKG_WINDOWS_TOOLCHAIN)
+ set(_VCPKG_WINDOWS_TOOLCHAIN 1)
+ set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<STREQUAL:${VCPKG_CRT_LINKAGE},dynamic>:DLL>" CACHE STRING "")
+ set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT "")
+
+ if(POLICY CMP0056)
+ cmake_policy(SET CMP0056 NEW)
+ endif()
+ if(POLICY CMP0066)
+ cmake_policy(SET CMP0066 NEW)
+ endif()
+ if(POLICY CMP0067)
+ cmake_policy(SET CMP0067 NEW)
+ endif()
+ if(POLICY CMP0137)
+ cmake_policy(SET CMP0137 NEW)
+ endif()
+ list(APPEND CMAKE_TRY_COMPILE_PLATFORM_VARIABLES
+ VCPKG_CRT_LINKAGE VCPKG_TARGET_ARCHITECTURE
+ VCPKG_C_FLAGS VCPKG_CXX_FLAGS
+ VCPKG_C_FLAGS_DEBUG VCPKG_CXX_FLAGS_DEBUG
+ VCPKG_C_FLAGS_RELEASE VCPKG_CXX_FLAGS_RELEASE
+ VCPKG_LINKER_FLAGS VCPKG_LINKER_FLAGS_RELEASE VCPKG_LINKER_FLAGS_DEBUG
+ VCPKG_PLATFORM_TOOLSET XBOX_CONSOLE_TARGET
+ )
+
+ set(CMAKE_SYSTEM_NAME Windows CACHE STRING "")
+
+ if(VCPKG_TARGET_ARCHITECTURE STREQUAL "x64")
+ set(CMAKE_SYSTEM_PROCESSOR AMD64 CACHE STRING "")
+ else()
+ message(FATAL_ERROR "Xbox requires x64 native target.")
+ endif()
+
+ if(DEFINED VCPKG_CMAKE_SYSTEM_VERSION)
+ set(CMAKE_SYSTEM_VERSION "${VCPKG_CMAKE_SYSTEM_VERSION}" CACHE STRING "" FORCE)
+ else()
+ set(CMAKE_SYSTEM_VERSION "10.0" CACHE STRING "" FORCE)
+ endif()
+
+ set(CMAKE_CROSSCOMPILING ON CACHE STRING "")
+
+ # Add the Microsoft GDK if present
+ if (DEFINED ENV{GRDKLatest})
+ cmake_path(SET _vcpkg_grdk "$ENV{GRDKLatest}")
+
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${_vcpkg_grdk}/gameKit/Include")
+ include_directories(BEFORE SYSTEM "${_vcpkg_grdk}/gameKit/Include")
+ cmake_path(CONVERT "${_vcpkg_grdk}/gameKit/Include" TO_NATIVE_PATH_LIST _vcpkg_inc NORMALIZE)
+
+ link_directories(BEFORE "${_vcpkg_grdk}/gameKit/Lib/amd64")
+ cmake_path(CONVERT "${_vcpkg_grdk}/gameKit/Lib/amd64" TO_NATIVE_PATH_LIST _vcpkg_lib NORMALIZE)
+ endif()
+
+ # Add the Microsoft GDK Xbox Extensions if present
+ if (DEFINED ENV{GXDKLatest})
+ cmake_path(SET _vcpkg_gxdk "$ENV{GXDKLatest}")
+
+ if(XBOX_CONSOLE_TARGET STREQUAL "scarlett")
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${_vcpkg_gxdk}/gameKit/Include" "${_vcpkg_gxdk}/gameKit/Include/Scarlett")
+ include_directories(BEFORE SYSTEM "${_vcpkg_gxdk}/gameKit/Include" "${_vcpkg_gxdk}/gameKit/Include/Scarlett")
+ cmake_path(CONVERT "${_vcpkg_gxdk}/gameKit/Include;${_vcpkg_gxdk}/gameKit/Include/Scarlett" TO_NATIVE_PATH_LIST _vcpkg_inc NORMALIZE)
+
+ link_directories(BEFORE "${_vcpkg_gxdk}/gameKit/Lib/amd64" "${_vcpkg_gxdk}/gameKit/Lib/amd64/Scarlett")
+ cmake_path(CONVERT "${_vcpkg_gxdk}/gameKit/Lib/amd64;${_vcpkg_gxdk}/gameKit/Lib/amd64/Scarlett" TO_NATIVE_PATH_LIST _vcpkg_lib NORMALIZE)
+ elseif(XBOX_CONSOLE_TARGET STREQUAL "xboxone")
+ list(APPEND CMAKE_REQUIRED_INCLUDES "${_vcpkg_gxdk}/gameKit/Include" "${_vcpkg_gxdk}/gameKit/Include/XboxOne")
+ include_directories(BEFORE SYSTEM "${_vcpkg_gxdk}/gameKit/Include" "${_vcpkg_gxdk}/gameKit/Include/XboxOne")
+ cmake_path(CONVERT "${_vcpkg_gxdk}/gameKit/Include;${_vcpkg_gxdk}/gameKit/Include/XboxOne" TO_NATIVE_PATH_LIST _vcpkg_inc NORMALIZE)
+
+ link_directories(BEFORE "${_vcpkg_gxdk}/gameKit/Lib/amd64" "${_vcpkg_gxdk}/gameKit/Lib/amd64/XboxOne")
+ cmake_path(CONVERT "${_vcpkg_gxdk}/gameKit/Lib/amd64;${_vcpkg_gxdk}/gameKit/Lib/amd64/XboxOne" TO_NATIVE_PATH_LIST _vcpkg_lib NORMALIZE)
+ endif()
+ endif()
+
+ if(DEFINED _vcpkg_inc)
+ set(ENV{INCLUDE} "${_vcpkg_inc};$ENV{INCLUDE}")
+ set(ENV{LIB} "${_vcpkg_lib};$ENV{LIB}")
+ endif()
+
+ unset(_vcpkg_inc)
+ unset(_vcpkg_lib)
+
+ set(_vcpkg_core_libs onecore_apiset.lib)
+ set(_vcpkg_default_lib onecore_apiset.lib)
+
+ set(MP_BUILD_FLAG "")
+ if(NOT (CMAKE_CXX_COMPILER MATCHES "clang-cl.exe"))
+ set(MP_BUILD_FLAG "/MP")
+ endif()
+
+ set(_vcpkg_cpp_flags "/nologo /DWIN32 /D_WINDOWS /D_UNICODE /DUNICODE /DWINAPI_FAMILY=WINAPI_FAMILY_GAMES /D_WIN32_WINNT=0x0A00 /D_ATL_NO_DEFAULT_LIBS /D__WRL_NO_DEFAULT_LIB__ /D__WRL_CLASSIC_COM_STRICT__ /D_UITHREADCTXT_SUPPORT=0 /D_CRT_USE_WINAPI_PARTITION_APP")
+ set(_vcpkg_common_flags "/nologo /Z7 ${MP_BUILD_FLAG} /GS /Gd /W3 /WX- /Zc:wchar_t /Zc:inline /Zc:forScope /fp:precise /Oy- /EHsc /utf-8")
+
+ # Add the Microsoft GDK if present
+ if (DEFINED _vcpkg_grdk)
+ string(APPEND _vcpkg_core_libs " xgameruntime.lib")
+ endif()
+
+ # Add the Microsoft GDK Xbox Extensions if present
+ if (DEFINED _vcpkg_gxdk)
+ if(XBOX_CONSOLE_TARGET STREQUAL "scarlett")
+ string(APPEND _vcpkg_cpp_flags " /D_GAMING_XBOX /D_GAMING_XBOX_SCARLETT")
+
+ set(_vcpkg_core_libs "xgameplatform.lib xgameruntime.lib")
+ set(_vcpkg_default_lib xgameplatform.lib)
+ elseif(XBOX_CONSOLE_TARGET STREQUAL "xboxone")
+ string(APPEND _vcpkg_cpp_flags " /D_GAMING_XBOX /D_GAMING_XBOX_XBOXONE")
+
+ set(_vcpkg_core_libs "xgameplatform.lib xgameruntime.lib")
+ set(_vcpkg_default_lib xgameplatform.lib)
+ endif()
+ endif()
+
+ set(CMAKE_C_STANDARD_LIBRARIES_INIT "${_vcpkg_core_libs}" CACHE INTERNAL "")
+ set(CMAKE_CXX_STANDARD_LIBRARIES_INIT "${_vcpkg_core_libs}" CACHE INTERNAL "")
+
+ set(CMAKE_C_STANDARD_LIBRARIES ${CMAKE_C_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE)
+ set(CMAKE_CXX_STANDARD_LIBRARIES ${CMAKE_CXX_STANDARD_LIBRARIES_INIT} CACHE STRING "" FORCE)
+
+ unset(_vcpkg_core_libs)
+
+ if(VCPKG_CRT_LINKAGE STREQUAL "dynamic")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MD")
+ elseif(VCPKG_CRT_LINKAGE STREQUAL "static")
+ set(VCPKG_CRT_LINK_FLAG_PREFIX "/MT")
+ else()
+ message(FATAL_ERROR "Invalid setting for VCPKG_CRT_LINKAGE: \"${VCPKG_CRT_LINKAGE}\". It must be \"static\" or \"dynamic\"")
+ endif()
+
+ if(XBOX_CONSOLE_TARGET STREQUAL "scarlett")
+ string(APPEND _vcpkg_common_flags " /favor:AMD64 /arch:AVX2")
+ elseif(XBOX_CONSOLE_TARGET STREQUAL "xboxone")
+ string(APPEND _vcpkg_common_flags " /favor:AMD64 /arch:AVX")
+ endif()
+
+ set(CMAKE_CXX_FLAGS "${_vcpkg_cpp_flags} ${_vcpkg_common_flags} ${VCPKG_CXX_FLAGS}" CACHE STRING "")
+ set(CMAKE_C_FLAGS "${_vcpkg_cpp_flags} ${_vcpkg_common_flags} ${VCPKG_C_FLAGS}" CACHE STRING "")
+ set(CMAKE_RC_FLAGS "-c65001 ${_vcpkg_cpp_flags}" CACHE STRING "")
+
+ unset(_vcpkg_cpp_flags)
+ unset(_vcpkg_common_flags)
+
+ set(CMAKE_CXX_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Od /RTC1 ${VCPKG_CXX_FLAGS_DEBUG}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_DEBUG "${VCPKG_CRT_LINK_FLAG_PREFIX}d /Od /RTC1 ${VCPKG_C_FLAGS_DEBUG}" CACHE STRING "")
+
+ set(CMAKE_CXX_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_CXX_FLAGS_RELEASE}" CACHE STRING "")
+ set(CMAKE_C_FLAGS_RELEASE "${VCPKG_CRT_LINK_FLAG_PREFIX} /O2 /Oi /Gy /DNDEBUG ${VCPKG_C_FLAGS_RELEASE}" CACHE STRING "")
+
+ # oldnames.lib is not in this list as many open source libraries still rely on the older non-compliant POSIX function names.
+ set(_vcpkg_unsupported advapi32.lib comctl32.lib comsupp.lib dbghelp.lib gdi32.lib gdiplus.lib guardcfw.lib mmc.lib msimg32.lib msvcole.lib msvcoled.lib mswsock.lib ntstrsafe.lib ole2.lib ole2autd.lib ole2auto.lib ole2d.lib ole2ui.lib ole2uid.lib ole32.lib oleacc.lib oleaut32.lib oledlg.lib oledlgd.lib runtimeobject.lib shell32.lib shlwapi.lib strsafe.lib urlmon.lib user32.lib userenv.lib wlmole.lib wlmoled.lib onecore.lib)
+ set (_vcpkg_nodefaultlib "/NODEFAULTLIB:kernel32.lib")
+ foreach(arg ${_vcpkg_unsupported})
+ string(APPEND _vcpkg_nodefaultlib " /NODEFAULTLIB:${arg}")
+ endforeach()
+
+ # Some upstream projects don't respect STANDARD_LIBRARIES_INIT and rely on default libs instead.
+ set(_vcpkg_common_lflags "/MANIFEST:NO /NXCOMPAT /DYNAMICBASE /DEBUG /MANIFESTUAC:NO /SUBSYSTEM:WINDOWS,10.0 /DEFAULTLIB:${_vcpkg_default_lib}")
+
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS " ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${_vcpkg_nodefaultlib}")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS " ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${_vcpkg_nodefaultlib}")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS " ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${_vcpkg_nodefaultlib}")
+
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_RELEASE_INIT " /nologo ")
+ set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE} ${_vcpkg_nodefaultlib}" CACHE STRING "")
+ set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE} ${_vcpkg_nodefaultlib}" CACHE STRING "")
+ set(CMAKE_EXE_LINKER_FLAGS_RELEASE "/nologo /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF ${_vcpkg_common_lflags} ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_RELEASE} ${_vcpkg_nodefaultlib}" CACHE STRING "")
+
+ string(APPEND CMAKE_STATIC_LINKER_FLAGS_DEBUG_INIT " /nologo ")
+ string(APPEND CMAKE_MODULE_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_SHARED_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+ string(APPEND CMAKE_EXE_LINKER_FLAGS_DEBUG_INIT " /nologo ${VCPKG_LINKER_FLAGS} ${VCPKG_LINKER_FLAGS_DEBUG} ")
+
+ unset(_vcpkg_unsupported)
+ unset(_vcpkg_nodefaultlib)
+ unset(_vcpkg_default_lib)
+ unset(_vcpkg_common_lflags)
+ unset(_vcpkg_grdk)
+ unset(_vcpkg_gxdk)
+ unset(MP_BUILD_FLAG)
+ unset(VCPKG_CRT_LINK_FLAG_PREFIX)
+endif()
diff --git a/vcpkg/scripts/update-vcpkg-tool-metadata.ps1 b/vcpkg/scripts/update-vcpkg-tool-metadata.ps1 new file mode 100644 index 0000000..c9794c8 --- /dev/null +++ b/vcpkg/scripts/update-vcpkg-tool-metadata.ps1 @@ -0,0 +1,45 @@ +[CmdletBinding()]
+Param(
+ [Parameter(Mandatory=$true)]
+ [ValidateNotNullOrEmpty()]
+ [string]$Date
+)
+
+[string]$metadata = "VCPKG_TOOL_RELEASE_TAG=$Date`n"
+Set-Content -LiteralPath "$PSScriptRoot\vcpkg-tool-metadata.txt" -Value $metadata -NoNewline -Encoding utf8NoBOM
+& "$PSScriptRoot\bootstrap.ps1"
+[string]$vcpkg = "$PSScriptRoot\..\vcpkg.exe"
+
+# Windows arm64 (VS Code only)
+& $vcpkg x-download "$PSScriptRoot\vcpkg-arm64.exe" `
+ "--url=https://github.com/microsoft/vcpkg-tool/releases/download/$Date/vcpkg-arm64.exe" --skip-sha512
+
+# Linux Binaries
+foreach ($binary in @('macos', 'muslc', 'glibc', 'glibc-arm64')) {
+ $caps = $binary.ToUpperInvariant().Replace('-', '_')
+ & $vcpkg x-download "$PSScriptRoot\vcpkg-$binary" `
+ "--url=https://github.com/microsoft/vcpkg-tool/releases/download/$Date/vcpkg-$binary" --skip-sha512
+ $sha512 = & $vcpkg hash "$PSScriptRoot\vcpkg-$binary"
+ $metadata += "VCPKG_$($caps)_SHA=$sha512`n"
+}
+
+# Source
+$sourceName = "$Date.zip"
+& $vcpkg x-download "$PSScriptRoot\$sourceName" `
+ "--url=https://github.com/microsoft/vcpkg-tool/archive/refs/tags/$Date.zip" --skip-sha512
+$sha512 = & $vcpkg hash "$PSScriptRoot\$sourceName"
+$metadata += "VCPKG_TOOL_SOURCE_SHA=$sha512`n"
+
+# Cleanup
+Remove-Item @(
+ "$PSScriptRoot\vcpkg-arm64.exe",
+ "$PSScriptRoot\vcpkg-macos",
+ "$PSScriptRoot\vcpkg-muslc",
+ "$PSScriptRoot\vcpkg-glibc",
+ "$PSScriptRoot\vcpkg-glibc-arm64",
+ "$PSScriptRoot\$sourceName"
+)
+
+Set-Content -LiteralPath "$PSScriptRoot\vcpkg-tool-metadata.txt" -Value $metadata -NoNewline -Encoding utf8NoBOM
+
+Write-Host "Metadata Written"
diff --git a/vcpkg/scripts/update_suitesparse.py b/vcpkg/scripts/update_suitesparse.py new file mode 100755 index 0000000..419683d --- /dev/null +++ b/vcpkg/scripts/update_suitesparse.py @@ -0,0 +1,120 @@ +#!/usr/bin/env python3 + +# Usage: ./update_suitesparse.py <new_version> +# +# Updates the `suitesparse` port and all of its `suitesparse-*` sub-packages +# based on the source archive automatically downloaded of the given version. + +import hashlib +import io +import json +import re +import sys +import tarfile +from pathlib import Path + +import requests + +ports_root = Path(__file__).resolve().parent.parent / "ports" + + +def download(url): + print(f"Downloading {url}...") + r = requests.get(url) + r.raise_for_status() + return r.content + + +def sha512(data): + sha = hashlib.sha512() + sha.update(data) + return sha.hexdigest() + + +def extract_version(content): + major = re.search(r"^set *\( *(\w+)_VERSION_MAJOR +(\d+) ", content, re.M).group(2) + minor = re.search(r"^set *\( *(\w+)_VERSION_MINOR +(\d+) ", content, re.M).group(2) + sub = re.search(r"^set *\( *(\w+)_VERSION_(?:SUB|PATCH|UPDATE) +(\d+) ", content, re.M).group(2) + return f"{major}.{minor}.{sub}" + + +def load_versions(tar_gz_bytes): + versions = {} + tar_gz_file = io.BytesIO(tar_gz_bytes) + with tarfile.open(fileobj=tar_gz_file, mode="r:gz") as tar: + for member in tar.getmembers(): + if not member.isfile(): + continue + if m := re.fullmatch(r"SuiteSparse-[^/]+/(\w+)/CMakeLists.txt", member.name): + name = m.group(1) + if name in ["Example", "GraphBLAS", "CSparse"]: + continue + content = tar.extractfile(member).read().decode("utf8") + versions[name] = extract_version(content) + elif member.name.endswith("GraphBLAS_version.cmake"): + content = tar.extractfile(member).read().decode("utf8") + versions["GraphBLAS"] = extract_version(content) + return versions + + +def update_manifest(pkg_name, version): + port_dir = ports_root / pkg_name + manifest_path = port_dir / "vcpkg.json" + manifest = json.loads(manifest_path.read_text("utf8")) + if manifest["version-semver"] == version: + return False + manifest["version-semver"] = version + manifest_path.write_text(json.dumps(manifest, indent=2) + "\n") + return True + + +def update_portfile(pkg_name, new_version, new_hash): + port_dir = ports_root / pkg_name + portfile_path = port_dir / "portfile.cmake" + content = portfile_path.read_text("utf8") + content, n = re.subn(r"\bREF v\S+", f"REF v{new_version}", content, re.M) + if n != 1: + raise Exception(f"Updating {pkg_name} portfile ref failed!") + content, n = re.subn(r"\bSHA512 \S+", f"SHA512 {new_hash}", content, re.M) + if n != 1: + raise Exception(f"Updating {pkg_name} portfile hash failed!") + portfile_path.write_text(content) + + +def update_port(pkg_name, new_version, suitesparse_hash): + port_dir = ports_root / pkg_name + if not port_dir.exists(): + raise Exception(f"'{pkg_name}' does not exist!") + update_manifest(pkg_name, new_version) + # Always update the tag in vcpkg_from_github() even if version has not changed + # to avoid having to download multiple versions of the source archive. + print(f"{pkg_name}: updating...") + if pkg_name == "suitesparse-graphblas": + url = f"https://github.com/DrTimothyAldenDavis/GraphBLAS/archive/refs/tags/v{new_version}.tar.gz" + graphblas_hash = sha512(download(url)) + update_portfile(pkg_name, new_version, graphblas_hash) + else: + update_portfile(pkg_name, suitesparse_version, suitesparse_hash) + + +def main(suitesparse_version): + suitesparse_url = ( + f"https://github.com/DrTimothyAldenDavis/SuiteSparse/archive/refs/tags/v{suitesparse_version}.tar.gz" + ) + tar_gz_bytes = download(suitesparse_url) + suitesparse_hash = sha512(tar_gz_bytes) + print("Reading versions from CMakeLists.txt files...") + versions = load_versions(tar_gz_bytes) + for lib, new_version in versions.items(): + pkg_name = "suitesparse-config" if lib == "SuiteSparse_config" else "suitesparse-" + lib.lower() + update_port(pkg_name, new_version, suitesparse_hash) + update_manifest("suitesparse", suitesparse_version) + print("Done!") + + +if __name__ == "__main__": + if len(sys.argv) != 2: + print("Usage: ./update_suitesparse.py <new_version>") + sys.exit(1) + suitesparse_version = sys.argv[1] + main(suitesparse_version) diff --git a/vcpkg/scripts/vcpkg-tool-metadata.txt b/vcpkg/scripts/vcpkg-tool-metadata.txt new file mode 100644 index 0000000..d51d499 --- /dev/null +++ b/vcpkg/scripts/vcpkg-tool-metadata.txt @@ -0,0 +1,6 @@ +VCPKG_TOOL_RELEASE_TAG=2025-10-16 +VCPKG_MACOS_SHA=5370c4209e5db659f949c508ca3012ee7780409a031b683362ac5af4ba3038995bea650e258bef0bd07b23bd2d37a154012da32c870b24ad0161320177dd1719 +VCPKG_MUSLC_SHA=4a9b111bd7c6c958a6db9d04e303d61765a9772c43265b58b15045256a4ea1e711b8e8df72dc8c5b6a36845fa271903399f676ac21daaab99f363b386e08e5d6 +VCPKG_GLIBC_SHA=191698aeff93fee0bdbfb3066afb50e40b3ac1b41d57ecb286e4fd74f99eaa9af55396eec67606c42362a67d5ac3f2114f52d7fe39a7955c99aeaea71e18a996 +VCPKG_GLIBC_ARM64_SHA=4f1a2bda7e995d664769fe342b1e6e4c73b07f3b1fb1380c80beb4eafb19369dd5783db6766dc3c5ac5ccd630b4e84da98bad5846f5ce1e7cdd14fb1efb9b0c6 +VCPKG_TOOL_SOURCE_SHA=3b5b757fc499dc22e37933eb93cd993ab021d75180ddbafcd447700478c4a85acde93e799d97f841d4100f1f70e8c5b0b1b01c89fb729cff751ef6d03547cf7b diff --git a/vcpkg/scripts/vcpkg-tools.json b/vcpkg/scripts/vcpkg-tools.json new file mode 100644 index 0000000..ab1afee --- /dev/null +++ b/vcpkg/scripts/vcpkg-tools.json @@ -0,0 +1,407 @@ +{ + "schema-version": 1, + "tools": [ + { + "name": "python3", + "os": "windows", + "version": "3.12.7", + "executable": "python.exe", + "url": "https://www.python.org/ftp/python/3.12.7/python-3.12.7-embed-win32.zip", + "sha512": "15542080e0cc25c574391218107fe843006e8c5a7161d1cd48cf14a3c47155c0244587273d9c747f35b15ea17676869ecce079214824214c1a62abfc86ad9f9b", + "archive": "python-3.12.7-embed-win32.zip" + }, + { + "name": "python3_with_venv", + "os": "windows", + "version": "3.12.7", + "executable": "tools/python.exe", + "url": "https://www.nuget.org/api/v2/package/python/3.12.7", + "sha512": "6d5cac329808e31d4d8d593da6eeaa9ea4ec0296679335e7b7811f6c6fa6cbb96948d2f7845071798c6f73f83852dd731dc2b0fda48c520b9bec8a86cc56134e", + "archive": "python-3.12.7.nupkg.zip" + }, + { + "name": "cmake", + "os": "windows", + "arch": "amd64", + "version": "3.30.1", + "executable": "cmake-3.30.1-windows-i386/bin/cmake.exe", + "url": "https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-windows-i386.zip", + "sha512": "0b74bd4222064cfb6e42838987704eb21d57ad5f7bbd87714ab570f1d107fa19bd2f14316475338518292bc377bf38b581a07c73267a775cd385bbd1800879b4", + "archive": "cmake-3.30.1-windows-i386.zip" + }, + { + "name": "cmake", + "os": "windows", + "arch": "arm64", + "version": "3.30.1", + "executable": "cmake-3.30.1-windows-arm64/bin/cmake.exe", + "url": "https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-windows-arm64.zip", + "sha512": "40bcdeff5ff40044629f49e0effc958a719353330ea39876b919fb7c2d441885c884acf43e644ab5dedcb95503d211c895da1c0b6360e71449bea6a981f8e128", + "archive": "cmake-3.30.1-windows-arm64.zip" + }, + { + "name": "cmake", + "os": "osx", + "version": "3.30.1", + "executable": "cmake-3.30.1-macos-universal/CMake.app/Contents/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-macos-universal.tar.gz", + "sha512": "71290d3b5e51724711e8784f5b21100cb0cffdbb889da7572a26dd171d9052601496de8d39c42d76ef3a9245af2ab35a590bf53ad68d7bb8a2047b64272d2647", + "archive": "cmake-3.30.1-macos-universal.tar.gz" + }, + { + "name": "cmake", + "os": "linux", + "arch": "arm64", + "version": "3.30.1", + "executable": "cmake-3.30.1-linux-aarch64/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-linux-aarch64.tar.gz", + "sha512": "ec6c1c682dda2381aa5ebef98a2597e4ab6b4563639c28b2f30c20360694b902a7b33c175c796169a9f99ed139f053916042caed58d83298680894c2840dbb87", + "archive": "cmake-3.30.1-linux-aarch64.tar.gz" + }, + { + "name": "cmake", + "os": "linux", + "version": "3.30.1", + "arch": "amd64", + "executable": "cmake-3.30.1-linux-x86_64/bin/cmake", + "url": "https://github.com/Kitware/CMake/releases/download/v3.30.1/cmake-3.30.1-linux-x86_64.tar.gz", + "sha512": "84ce1333ed696a1736986fba2853c5d8db0e4c9addaf4a4723911248c6d49ecf545adf8bd46091d198fc7bd1e6c896798661463aa1ce3a726a093883aaa19adf", + "archive": "cmake-3.30.1-linux-x86_64.tar.gz" + }, + { + "name": "git", + "os": "windows", + "arch": "arm64", + "version": "2.7.4", + "executable": "clangarm64/bin/git.exe", + "url": "https://github.com/git-for-windows/git/releases/download/v2.51.0.windows.1/PortableGit-2.51.0-arm64.7z.exe", + "sha512": "877b4cc5c91108488c55b9a75059d864915f50929cc4ebfa741074216e5e597ae3b7f4e35dea7a1e667f8d712ba8d1f6813d66d11d00bf42b0bb681322386e76", + "archive": "PortableGit-2.47.1.2-arm64.7z.exe" + }, + { + "name": "git", + "os": "windows", + "arch": "amd64", + "version": "2.7.4", + "executable": "mingw64/bin/git.exe", + "url": "https://github.com/git-for-windows/git/releases/download/v2.51.0.windows.1/PortableGit-2.51.0-64-bit.7z.exe", + "sha512": "74680d7d4573e2f428bbaa0d38d6506ddf870f2a20f4ec3118bc3012cb9ca766e03508f074fd4b3b0b034bbd05d2c4eecde321c73e18613fe11fbc7510c731c7", + "archive": "PortableGit-2.47.1.2-64-bit.7z.exe" + }, + { + "name": "git", + "os": "linux", + "version": "2.7.4", + "executable": "" + }, + { + "name": "git", + "os": "osx", + "version": "2.7.4", + "executable": "" + }, + { + "name": "git", + "os": "freebsd", + "version": "2.7.4", + "executable": "" + }, + { + "name": "gsutil", + "os": "windows", + "version": "4.65", + "executable": "google-cloud-sdk/bin/gsutil.cmd", + "url": "https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip", + "sha512": "e2792e17b132aad77f7c0b9fd26faf415e9437923d9227a9e6d253554e6843d29a6ddad0a7fb5e9aea4a130fd4c521e6ece8844fd4a4f9e8d580348775425389", + "archive": "google-cloud-sdk-347.0.0-windows-x86_64-bundled-python.zip" + }, + { + "name": "gsutil", + "os": "osx", + "version": "4.65", + "executable": "gsutil/gsutil", + "url": "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz", + "sha512": "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd51bc83d112339d8e6096a2f21c8", + "archive": "gsutil_4.65.tar.gz" + }, + { + "name": "gsutil", + "os": "linux", + "version": "4.65", + "executable": "gsutil/gsutil", + "url": "https://storage.googleapis.com/pub/gsutil_4.65.tar.gz", + "sha512": "2c5c9dea48147f97180a491bbb9e24e8cbcd4f3452620e2f80338b781e4dfc90bb754e3bbfa05e1b990e44bff52d990d8c2dd51bc83d112339d8e6096a2f21c8", + "archive": "gsutil_4.65.tar.gz" + }, + { + "name": "vswhere", + "os": "windows", + "version": "3.1.7", + "executable": "vswhere.exe", + "url": "https://github.com/microsoft/vswhere/releases/download/3.1.7/vswhere.exe", + "sha512": "40c534eb27f079c15c9782f53f82c12dabfede4d3d85f0edf8a855c2b0d5e12921a96506b37c210beab3c33220f8ff098447ad054e82d8c2603964975fc12076" + }, + { + "name": "nuget", + "os": "windows", + "version": "6.10.0", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe", + "sha512": "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead99e97139cdc86dde16a5ec3e7cf" + }, + { + "name": "nuget", + "os": "linux", + "version": "6.10.0", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe", + "sha512": "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead99e97139cdc86dde16a5ec3e7cf" + }, + { + "name": "nuget", + "os": "osx", + "version": "6.10.0", + "executable": "nuget.exe", + "url": "https://dist.nuget.org/win-x86-commandline/v6.10.0/nuget.exe", + "sha512": "71d7307bb89de2df3811419c561efa00618a4c68e6ce481b0bdfc94c7c6c6d126a54eb26a0015686fabf99f109744ca41fead99e97139cdc86dde16a5ec3e7cf" + }, + { + "name": "coscli", + "os": "windows", + "version": "1.0.3", + "arch": "amd64", + "executable": "coscli-v1.0.3-windows-amd64.exe", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-windows-amd64.exe", + "sha512": "909b1c48e3c0dc0c3a4bd32d865db914307f65d6266c4f9025a4a6aea1e75b817581b8257633e74b3cab86b4f2e343d049a9ce65ceaf6b85dacdd55afd74d183" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.3", + "arch": "arm", + "executable": "coscli-v1.0.3-linux-arm", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-linux-arm", + "sha512": "28f43cc678665b87da19a26838037552638aea96b541171f0e5f71eb3098fff3b2325f96c81532fb102dcb09f8bbd707b8d269d14879a4404b2b31336ced15f7" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.3", + "arch": "arm64", + "executable": "coscli-v1.0.3-linux-arm64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-linux-arm64", + "sha512": "c277b8b921df9459045c7a9d4faefa8a86df93d75ab58f228ca168175226d58adeb9b78af2aac0638feb2232c0fa5d5f24bf4a76f7bd2822a9f21662b23fa3d6" + }, + { + "name": "coscli", + "os": "linux", + "version": "1.0.3", + "arch": "amd64", + "executable": "coscli-v1.0.3-linux-amd64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-linux-amd64", + "sha512": "6c55a2b6e00afcc3cd3d724c50f8b07ab8b54b7d04f0e2a55f2b82a8735504422132431c4a70b152b94d7f02f9c03cea25f98013f884f099ba2bfd414ed9521a" + }, + { + "name": "coscli", + "os": "osx", + "version": "1.0.3", + "arch": "arm64", + "executable": "coscli-v1.0.3-darwin-arm64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-darwin-arm64", + "sha512": "c91b2665682969e389b3c70c663eb694024b2f7ed68e059d2b9f44000259f6c6466cc33667b8557a2999b2d2ed912b405f997420c56df6dea50576368b1b8536" + }, + { + "name": "coscli", + "os": "osx", + "version": "1.0.3", + "arch": "amd64", + "executable": "coscli-v1.0.3-darwin-amd64", + "url": "https://github.com/tencentyun/coscli/releases/download/v1.0.3/coscli-v1.0.3-darwin-amd64", + "sha512": "aaa7fe9e71ef46246d08a59777898ea59a4ca6261ca9139e02ed2ebdc026295fa8d24d48cda2973c05fefe82379ad007196e08973dde6ce36c816df1dcfead2e" + }, + { + "name": "7zip_msi", + "os": "windows", + "version": "25.01", + "executable": "Files/7-Zip/7z.exe", + "url": "https://github.com/ip7z/7zip/releases/download/25.01/7z2501-x64.msi", + "sha512": "d481c49ff571d86e29eb9df700be4c79fe5a4bc8616b1524a3c10ef5ad3592a9d495b057e8be20952437760aad020087aca5ee9c73ddd716285a9848257fc1dc", + "archive": "7z2501-x64.msi" + }, + { + "name": "7zip", + "os": "windows", + "version": "25.01", + "executable": "7z.exe", + "url": "https://github.com/ip7z/7zip/releases/download/25.01/7z2501.exe", + "sha512": "1d6dd5ecadb2809dc4ee8ec6b022513cf7aa4f12ed6de2869c90c8c0f04db006fd0da214a7cdf3117572d4f9ea3f2e96de1af9e6042e9acff54ea2c177eda47a", + "archive": "7z2501.7z.exe" + }, + { + "name": "7zr", + "os": "windows", + "version": "25.01", + "executable": "7zr.exe", + "url": "https://github.com/ip7z/7zip/releases/download/25.01/7zr.exe", + "sha512": "7d84fcad0a6a1cf8c2e7bb01606c671cd91bf2691595eee1f0d67c89711c551778188423f07bbbfdced6ea03eda33b513fffa39584c60e9a5079a0efb7e73bb0" + }, + { + "name": "ninja", + "os": "windows", + "arch": "arm64", + "version": "1.13.1", + "executable": "ninja.exe", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-winarm64.zip", + "sha512": "6a3873522b3397a4d68c6a6c3e389085b81ba5ff20d4f5c289b3974c8bf7169de9cf2c8d9482c2b06846783492620008f486db44c2c651f007b3c335022a472d", + "archive": "ninja-winarm64-1.13.1.zip" + }, + { + "name": "ninja", + "os": "windows", + "arch": "x64", + "version": "1.13.1", + "executable": "ninja.exe", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip", + "sha512": "44955ef9e0053036dc316de3693523ce280338c816b445c27fcbe7dd219543b815812662c9082c409b17d823284506faa5b5c3c5f6d3721242dfc73e56d4ec34", + "archive": "ninja-win-1.13.1.zip" + }, + { + "name": "ninja", + "os": "linux", + "arch": "arm64", + "version": "1.13.1", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux-aarch64.zip", + "sha512": "7cd841409fd2a4f35566ab2f0add75d89d94cfaa5952bc550cf263878469ab8109e36553b66e6422018012a4e9af4c7eaf79c84af1733d061231ce3511e3c98e", + "archive": "ninja-linux-aarch64-1.13.1.zip" + }, + { + "name": "ninja", + "os": "linux", + "arch": "x64", + "version": "1.13.1", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip", + "sha512": "ca4e424c46c12f4e120ab2030edcff8e34cf5db9d05b4364f2d4be10f46e1a29eef64f7b4bf65fb33cd629b3bc3bcb9292341f92953968ef226f44b52959d916", + "archive": "ninja-linux-1.13.1.zip" + }, + { + "name": "ninja", + "os": "osx", + "version": "1.13.1", + "executable": "ninja", + "url": "https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-mac.zip", + "sha512": "72ce74b57d21bcd50c1d457a304a3f4f88d960631a945f754180153a7e747950bc2e34195d0490d2c298bba2c02f96d5a5925b4096ddb7c86b67d35f7579641f", + "archive": "ninja-mac-1.13.1.zip" + }, + { + "name": "powershell-core", + "os": "windows", + "version": "7.5.3", + "executable": "pwsh.exe", + "url": "https://github.com/PowerShell/PowerShell/releases/download/v7.5.3/PowerShell-7.5.3-win-x64.zip", + "sha512": "3ccac854b8764423d9da5ffd680f8a9d68f37bcac703d17afba89109433d383fbbc5fd55a8b80d406f0f5e8b76836edeb148621fd3b99a5aca549c8938b8c578", + "archive": "PowerShell-7.5.3-win-x64.zip" + }, + { + "name": "node", + "os": "windows", + "arch":"x64", + "version": "24.8.0", + "executable": "node-v24.8.0-win-x64/node.exe", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-win-x64.7z", + "sha512": "df7099033a60f746f2a9eb0374d41fb68e7b0cce57f07a1819d3500ce8db36e3da2a6c77227f82e3373f1fe1cdec565f22ee8092274853d8f249fcdc0af5da06", + "archive": "node-v24.8.0-win-x64.7z" + }, + { + "name": "node", + "os": "windows", + "arch":"arm64", + "version": "24.8.0", + "executable": "node-v24.8.0-win-arm64/node.exe", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-win-arm64.7z", + "sha512": "f80a971d6c818aaea423d7b7171e27636d2701715bb1f6b760872d240121b1eb79bd717977bb3f4909ada81fbb7a941e1c1892707f758c7861d15fcdd623ede5", + "archive": "node-v24.8.0-win-arm64.7z" + }, + { + "name": "node", + "os": "linux", + "arch":"x64", + "version": "24.8.0", + "executable": "node-v24.8.0-linux-x64/bin/node", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-linux-x64.tar.gz", + "sha512": "c008d04c1976353fc9cf0efde11ab1cacbc726122ebe22cabf2d5eff156072266bc5a214caf0e064c59899ed4ce674f52fffb9aeec399ce0f94e347086ecf114", + "archive": "node-v24.8.0-linux-x64.tar.gz" + }, + { + "name": "node", + "os": "linux", + "arch": "arm64", + "version": "24.8.0", + "executable": "node-v24.8.0-linux-arm64/bin/node", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-linux-arm64.tar.gz", + "sha512": "58bcef57e47179ac9f0b81a2118c4ecb464fd8e38809e9744026af466f4ef1c7df16dd075e7f58b90d80e67241151d623cd48cba8a83cf898c42774b387c8d27", + "archive": "node-v24.8.0-linux-arm64.tar.gz" + }, + { + "name": "node", + "os": "osx", + "arch":"x64", + "version": "24.8.0", + "executable": "node-v24.8.0-darwin-x64/bin/node", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-darwin-x64.tar.gz", + "sha512": "7537027ce5d7b46e7241625d95a18df15e41233de4ec11ba17e9c500f7eb1b26004921f966f1a862c079fe56143934dd903a29cd5f41d22995811b6fd0842ca7", + "archive": "node-v24.8.0-darwin-x64.tar.gz" + }, + { + "name": "node", + "os": "osx", + "arch": "arm64", + "version": "24.8.0", + "executable": "node-v24.8.0-darwin-arm64/bin/node", + "url": "https://nodejs.org/dist/v24.8.0/node-v24.8.0-darwin-arm64.tar.gz", + "sha512": "54e33d0397148e805aff9e3732a71c4f0e6de89a5c4cbe55606c5886e16df2df7812dc8c48f001e1ea2902002a4388221a86af3eb491d8c2287da4b7acdd57a6", + "archive": "node-v24.8.0-darwin-arm64.tar.gz" + }, + { + "name": "azcopy", + "os": "linux", + "arch": "amd64", + "version": "10.30.1", + "executable": "azcopy_linux_amd64_10.30.1/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.30.1/azcopy_linux_amd64_10.30.1.tar.gz", + "sha512": "ce4e760d047ef01def9e9e1057540d5b22da610ef1627820ca89ecf5496f2ebf6173fe7ff52fa00dcea55ff9f6e737b53ad1decaca32cd058037954fe1794b6f", + "archive": "azcopy_linux_amd64_10.30.1.tar.gz" + }, + { + "name": "azcopy", + "os": "osx", + "arch": "amd64", + "version": "10.30.1", + "executable": "azcopy_darwin_amd64_10.30.1/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.30.1/azcopy_darwin_amd64_10.30.1.zip", + "sha512": "dbc2b10cf11df3f25cb30256c653ae713012c74c0a244b4db65bb270bc5499cff4aee88fba3457a2b2efb14b6bfb64be3a511e3ea43efa44c2a5c0aa1166dfe7", + "archive": "azcopy_darwin_amd64_10.30.1.zip" + }, + { + "name": "azcopy", + "os": "osx", + "arch": "arm64", + "version": "10.30.1", + "executable": "azcopy_darwin_arm64_10.30.1/azcopy", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.30.1/azcopy_darwin_arm64_10.30.1.zip", + "sha512": "8b4f4c694a3292bb4e55f14e9898446f38ee07a008f4dfc32c73b0dece78cc159c639afa8bfbe49a9d07a9bb456233beb2692f7a338da027207e28b42434f613", + "archive": "azcopy_darwin_arm64_10.30.1.zip" + }, + { + "name": "azcopy", + "os": "windows", + "arch": "amd64", + "version": "10.30.1", + "executable": "azcopy_windows_amd64_10.30.1/azcopy.exe", + "url": "https://github.com/Azure/azure-storage-azcopy/releases/download/v10.30.1/azcopy_windows_amd64_10.30.1.zip", + "sha512": "9610cff24c5a0f85423892b3b9ff1b46c7c6b1b8ef27c1164298cc3cd212fc7be0d6f3fbaef42268264448f1d9cd77c39272eebccd9fb8943bbb27a4a638e4c5", + "archive": "azcopy_windows_amd64_10.30.1.zip" + } + ] +} diff --git a/vcpkg/scripts/vcpkg_completion.bash b/vcpkg/scripts/vcpkg_completion.bash new file mode 100644 index 0000000..d009f73 --- /dev/null +++ b/vcpkg/scripts/vcpkg_completion.bash @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +# set -x + +# To install: +# > vcpkg integrate bash +# This adds the following line to ~/.bashrc: +# source ~/vcpkg/scripts/vcpkg_completion.bash + +# Details: bash and utilities from bash-completion +# Bash commands: compgen, complete +# Input: COMP_WORDS, COMP_CWORD, COMP_LINE, COMP_POINT, COMP_KEY, COMP_WORDBREAKS +# Output: COMPREPLY + +_vcpkg_completions() +{ + local vcpkg_executable=${COMP_WORDS[0]} + local remaining_command_line=${COMP_LINE:(${#vcpkg_executable}+1)} + # echo "rem:$remaining_command_line" + + if [ $COMP_CWORD -eq 1 ]; then + local opts=$(${vcpkg_executable} autocomplete ${remaining_command_line}) + else + local opts=$(${vcpkg_executable} autocomplete ${remaining_command_line} --) + fi + #echo "opts:$opts" + + COMPREPLY=($(compgen -W "${opts}" -- ${COMP_WORDS[COMP_CWORD]}) ) + #echo "COMPREPLY:$COMPREPLY" +} + +complete -F _vcpkg_completions vcpkg + diff --git a/vcpkg/scripts/vcpkg_completion.fish b/vcpkg/scripts/vcpkg_completion.fish new file mode 100644 index 0000000..42e4b78 --- /dev/null +++ b/vcpkg/scripts/vcpkg_completion.fish @@ -0,0 +1,92 @@ +# vcpkg completions for fish +set vcpkg_executable (string split -m1 ' ' (commandline -cb))[1] + +function _vcpkg_completions + set arg (string split -m1 ' ' (commandline -cb))[2] + set curr_token (commandline -t) + if [ -n $arg ] + if [ -z $curr_token ] + set arg $arg " " + end + end + for key in ($vcpkg_executable autocomplete "$arg" -- 2>/dev/null) + echo $key + end +end + +complete -c vcpkg -f --arguments '(_vcpkg_completions)' + +set vcpkg_commands ($vcpkg_executable autocomplete) + +function _set_triplet_arguments + set triplets ($vcpkg_executable help triplet | grep "^\s" | cut -d' ' -f3) + set triplet_from "" + for triplet in $triplets + echo (test -n "$triplet") >> temp.txt + if [ (string sub -l5 -- $triplet) = "VCPKG" ] + set -l temp (string length $triplet) + set triplet_from (string sub -s6 -l(math $temp - 15) -- $triplet) + else if [ -n "$triplet" ] + complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l triplet -d "$triplet_from" -a (string sub -s3 -- $triplet) + end + end +end +_set_triplet_arguments + +# options for all completions +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l triplet -d "Specify the target architecture triplet. See 'vcpkg help triplet' (default: \$VCPKG_DEFAULT_TRIPLET)" +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l overlay-ports -d "Specify directories to be used when searching for ports (also: \$VCPKG_OVERLAY_PORTS)" -a '(__fish_complete_directories)' +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l overlay-triplets -d "Specify directories containing triplets files (also: \$VCPKG_OVERLAY_TRIPLETS)" -a '(__fish_complete_directories)' +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l binarysource -d "Add sources for binary caching. See 'vcpkg help binarycaching'" -a '(__fish_complete_directories)' +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l downloads-root -d "Specify the downloads root directory (default: \$VCPKG_DOWNLOADS)" -a '(__fish_complete_directories)' +complete -c vcpkg -n "__fish_seen_subcommand_from $vcpkg_commands" -x -l vcpkg-root -d "Specify the vcpkg root directory (default: \$VCPKG_ROOT)" -a '(__fish_complete_directories)' + +# options for install +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l dry-run -d "Do not actually build or install" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l head -d "Install the libraries on the command line using the latest upstream sources" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l no-downloads -d "Do not download new sources" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l only-downloads -d "Download sources but don't build packages" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l recurse -d "Allow removal of packages as part of installation" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l keep-going -d "Continue installing packages on failure" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l editable -d "Disable source re-extraction and binary caching for libraries on the command line" +complete -c vcpkg -n "__fish_seen_subcommand_from install" -f -l clean-after-build -d "Clean buildtrees, packages and downloads after building each package" + +# options for edit +complete -c vcpkg -n "__fish_seen_subcommand_from edit" -f -l buildtrees -d "Open editor into the port-specific buildtree subfolder" +complete -c vcpkg -n "__fish_seen_subcommand_from edit" -f -l all -d "Open editor into the port as well as the port-specific buildtree subfolder" + +# options for export +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l dry-run -d "Do not actually export" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l raw -d "Export to an uncompressed directory" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l nuget -d "Export a NuGet package" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l ifw -d "Export to an IFW-based installer" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l zip -d "Export to a zip file" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l 7zip -d "Export to a 7zip (.7z) file" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l prefab -d "Export to Prefab format" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l prefab-maven -d "Enable maven" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -l prefab-debug -d "Enable prefab debug" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l output -d "Specify the output name (used to construct filename)" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l output-dir -d "Specify the output directory for produced artifacts" -a '(__fish_complete_directories)' +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l nuget-id -d "Specify the id for the exported NuGet package (overrides --output)" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l nuget-version -d "Specify the version for the exported NuGet package" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l ifw-repository-url -d "Specify the remote repository URL for the online installer" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l ifw-packages-directory-path -d "Specify the temporary directory path for the repacked packages" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l ifw-repository-directory-path -d "Specify the directory path for the exported repository" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l ifw-configuration-file-path -d "Specify the temporary file path for the installer configuration" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l ifw-installer-file-path -d "Specify the file path for the exported installer" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l prefab-group-id -d "GroupId uniquely identifies your project according maven specifications" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l prefab-artifact-id -d "Artifact Id is the name of the project according maven specifications" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l prefab-version -d "Version is the name of the project according maven specifications" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l prefab-min-sdk -d "Android minimum supported sdk version" +complete -c vcpkg -n "__fish_seen_subcommand_from export" -f -r -l prefab-target-sdk -d "Android target sdk version" + +# options for remove +complete -c vcpkg -n "__fish_seen_subcommand_from remove" -f -l purge -d "Remove the cached copy of the package (default)" +complete -c vcpkg -n "__fish_seen_subcommand_from remove" -f -l no-purge -d "Do not remove the cached copy of the package (deprecated)" +complete -c vcpkg -n "__fish_seen_subcommand_from remove" -f -l recurse -d "Allow removal of packages not explicitly specified on the command line" +complete -c vcpkg -n "__fish_seen_subcommand_from remove" -f -l dry-run -d "Print the packages to be removed, but do not remove them" +complete -c vcpkg -n "__fish_seen_subcommand_from remove" -f -l outdated -d "Select all packages with versions that do not match the portfiles" + +# options for upgrade +complete -c vcpkg -n "__fish_seen_subcommand_from upgrade" -f -l no-dry-run -d "Actually upgrade" +complete -c vcpkg -n "__fish_seen_subcommand_from upgrade" -f -l keep-going -d "Continue installing packages on failure" diff --git a/vcpkg/scripts/vcpkg_completion.zsh b/vcpkg/scripts/vcpkg_completion.zsh new file mode 100644 index 0000000..ee499f6 --- /dev/null +++ b/vcpkg/scripts/vcpkg_completion.zsh @@ -0,0 +1,9 @@ + +_vcpkg_completions() +{ + local vcpkg_executable=${COMP_WORDS[0]} + local remaining_command_line=${COMP_LINE:(${#vcpkg_executable}+1)} + COMPREPLY=($(${vcpkg_executable} autocomplete "${remaining_command_line}" -- 2>/dev/null)) +} + +complete -F _vcpkg_completions vcpkg |