aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBryan Galdrikian <[email protected]>2024-12-20 16:15:12 -0800
committerBryan Galdrikian <[email protected]>2024-12-20 16:15:12 -0800
commitb16fdc73d55b467b15595e32c70418ea55c1fe2b (patch)
tree4213c6fe17aafd8bdf23e66d376ca03ccb33ae86
parentRemoving reference to deprecated documentation server (diff)
downloadblast-b16fdc73d55b467b15595e32c70418ea55c1fe2b.tar.xz
blast-b16fdc73d55b467b15595e32c70418ea55c1fe2b.zip
Updating packman
-rwxr-xr-xREADME.md4
-rwxr-xr-xbuildtools/get_build_deps.cmd2
-rw-r--r--buildtools/packman/bootstrap/configure.bat169
-rw-r--r--buildtools/packman/bootstrap/download_file_from_url.ps153
-rw-r--r--buildtools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd35
-rw-r--r--buildtools/packman/bootstrap/generate_temp_file_name.ps1161
-rw-r--r--buildtools/packman/bootstrap/generate_temp_folder.ps1167
-rw-r--r--buildtools/packman/bootstrap/install_package.py172
-rw-r--r--buildtools/packman/config.packman.xml5
-rw-r--r--buildtools/packman/packman.cmd89
-rw-r--r--buildtools/packman/packman.txt192
-rw-r--r--buildtools/packman/python.bat32
-rw-r--r--buildtools/packman/python.sh42
-rwxr-xr-xbuildtools/packman5/config.packman.xml3
-rwxr-xr-xbuildtools/packman5/packman114
-rwxr-xr-xbuildtools/packman5/packman.cmd40
-rwxr-xr-xbuildtools/packman5/win-bootstrap/configure.bat146
-rwxr-xr-xbuildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd22
-rwxr-xr-xbuildtools/packman5/win-bootstrap/fetch_file_from_s3.ps160
-rwxr-xr-xbuildtools/packman5/win-bootstrap/fetch_file_from_url.ps137
-rwxr-xr-xbuildtools/packman5/win-bootstrap/generate_temp_file_name.ps12
-rw-r--r--buildtools/packman5/win-bootstrap/generate_temp_folder.ps17
-rwxr-xr-xbuildtools/packman5/win-bootstrap/install_package.py39
-rwxr-xr-xdocs/_compile/doxygen.bat2
-rwxr-xr-xdocs/_compile/doxygen.sh2
-rwxr-xr-xdocs/release_notes.txt9
-rwxr-xr-xdownload_sample_resources.bat2
-rwxr-xr-xgenerate_projects_linux.sh4
-rwxr-xr-xgenerate_projects_linux_ue4_crosscompile.bat2
-rwxr-xr-xgenerate_projects_vc15win64.bat2
30 files changed, 1136 insertions, 480 deletions
diff --git a/README.md b/README.md
index 0e59456..8791dbc 100755
--- a/README.md
+++ b/README.md
@@ -1,5 +1,5 @@
-Blast 1.1.9
-===========
+Blast 1.1.10
+============
![Alt text](/images/blast.png?raw=true "Blast Intro")
diff --git a/buildtools/get_build_deps.cmd b/buildtools/get_build_deps.cmd
index 2e87f50..fe24227 100755
--- a/buildtools/get_build_deps.cmd
+++ b/buildtools/get_build_deps.cmd
@@ -1,5 +1,5 @@
@echo Getting build tool dependencies for %1 ...
-@call "%~dp0packman5\packman.cmd" pull "%~dp0build_platform_deps.xml" --platform %1
+@call "%~dp0packman\packman.cmd" pull "%~dp0build_platform_deps.xml" --platform %1
@if %ERRORLEVEL% neq 0 (
@exit /b %errorlevel%
) else (
diff --git a/buildtools/packman/bootstrap/configure.bat b/buildtools/packman/bootstrap/configure.bat
new file mode 100644
index 0000000..33fb441
--- /dev/null
+++ b/buildtools/packman/bootstrap/configure.bat
@@ -0,0 +1,169 @@
+:: Copyright 2019-2023 NVIDIA CORPORATION
+::
+:: Licensed under the Apache License, Version 2.0 (the "License");
+:: you may not use this file except in compliance with the License.
+:: You may obtain a copy of the License at
+::
+:: http://www.apache.org/licenses/LICENSE-2.0
+::
+:: Unless required by applicable law or agreed to in writing, software
+:: distributed under the License is distributed on an "AS IS" BASIS,
+:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+:: See the License for the specific language governing permissions and
+:: limitations under the License.
+
+set PM_PACKMAN_VERSION=7.23.1
+
+:: Specify where packman command is rooted
+set PM_INSTALL_PATH=%~dp0..
+
+:: The external root may already be configured and we should do minimal work in that case
+if defined PM_PACKAGES_ROOT goto ENSURE_DIR
+
+:: If the folder isn't set we assume that the best place for it is on the drive that we are currently
+:: running from
+set PM_DRIVE=%CD:~0,2%
+
+set PM_PACKAGES_ROOT=%PM_DRIVE%\packman-repo
+
+:: We use *setx* here so that the variable is persisted in the user environment
+echo Setting user environment variable PM_PACKAGES_ROOT to %PM_PACKAGES_ROOT%
+setx PM_PACKAGES_ROOT %PM_PACKAGES_ROOT%
+if %errorlevel% neq 0 ( goto ERROR )
+
+:: The above doesn't work properly from a build step in VisualStudio because a separate process is
+:: spawned for it so it will be lost for subsequent compilation steps - VisualStudio must
+:: be launched from a new process. We catch this odd-ball case here:
+if defined PM_DISABLE_VS_WARNING goto ENSURE_DIR
+if not defined VSLANG goto ENSURE_DIR
+echo The above is a once-per-computer operation. Unfortunately VisualStudio cannot pick up environment change
+echo unless *VisualStudio is RELAUNCHED*.
+echo If you are launching VisualStudio from command line or command line utility make sure
+echo you have a fresh launch environment (relaunch the command line or utility).
+echo If you are using 'linkPath' and referring to packages via local folder links you can safely ignore this warning.
+echo You can disable this warning by setting the environment variable PM_DISABLE_VS_WARNING.
+echo.
+
+:: Check for the directory that we need. Note that mkdir will create any directories
+:: that may be needed in the path
+:ENSURE_DIR
+if not exist "%PM_PACKAGES_ROOT%" (
+ echo Creating packman packages cache at %PM_PACKAGES_ROOT%
+ mkdir "%PM_PACKAGES_ROOT%"
+)
+if %errorlevel% neq 0 ( goto ERROR_MKDIR_PACKAGES_ROOT )
+
+:: The Python interpreter may already be externally configured
+if defined PM_PYTHON_EXT (
+ set PM_PYTHON=%PM_PYTHON_EXT%
+ goto PACKMAN
+)
+
+set PM_PYTHON_VERSION=3.10.5-1-windows-x86_64
+set PM_PYTHON_BASE_DIR=%PM_PACKAGES_ROOT%\python
+set PM_PYTHON_DIR=%PM_PYTHON_BASE_DIR%\%PM_PYTHON_VERSION%
+set PM_PYTHON=%PM_PYTHON_DIR%\python.exe
+
+if exist "%PM_PYTHON%" goto PACKMAN
+if not exist "%PM_PYTHON_BASE_DIR%" call :CREATE_PYTHON_BASE_DIR
+
+set PM_PYTHON_PACKAGE=python@%PM_PYTHON_VERSION%.cab
+for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do set TEMP_FILE_NAME=%%a
+set TARGET=%TEMP_FILE_NAME%.zip
+call "%~dp0fetch_file_from_packman_bootstrap.cmd" %PM_PYTHON_PACKAGE% "%TARGET%"
+if %errorlevel% neq 0 (
+ echo !!! Error fetching python from CDN !!!
+ goto ERROR
+)
+
+for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_folder.ps1" -parentPath "%PM_PYTHON_BASE_DIR%"') do set TEMP_FOLDER_NAME=%%a
+echo Unpacking Python interpreter ...
+"%SystemRoot%\system32\expand.exe" -F:* "%TARGET%" "%TEMP_FOLDER_NAME%" 1> nul
+del "%TARGET%"
+:: Failure during extraction to temp folder name, need to clean up and abort
+if %errorlevel% neq 0 (
+ echo !!! Error unpacking python !!!
+ call :CLEAN_UP_TEMP_FOLDER
+ goto ERROR
+)
+
+:: If python has now been installed by a concurrent process we need to clean up and then continue
+if exist "%PM_PYTHON%" (
+ call :CLEAN_UP_TEMP_FOLDER
+ goto PACKMAN
+) else (
+ if exist "%PM_PYTHON_DIR%" ( rd /s /q "%PM_PYTHON_DIR%" > nul )
+)
+
+:: Perform atomic move (allowing overwrite, /y)
+move /y "%TEMP_FOLDER_NAME%" "%PM_PYTHON_DIR%" 1> nul
+:: Verify that python.exe is now where we expect
+if exist "%PM_PYTHON%" goto PACKMAN
+
+:: Wait a second and try again (can help with access denied weirdness)
+timeout /t 1 /nobreak 1> nul
+move /y "%TEMP_FOLDER_NAME%" "%PM_PYTHON_DIR%" 1> nul
+if %errorlevel% neq 0 (
+ echo !!! Error moving python %TEMP_FOLDER_NAME% -> %PM_PYTHON_DIR% !!!
+ call :CLEAN_UP_TEMP_FOLDER
+ goto ERROR
+)
+
+:PACKMAN
+:: The packman module may already be externally configured
+if defined PM_MODULE_DIR_EXT (
+ set PM_MODULE_DIR=%PM_MODULE_DIR_EXT%
+) else (
+ set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman-common\%PM_PACKMAN_VERSION%
+)
+
+set PM_MODULE=%PM_MODULE_DIR%\run.py
+
+if exist "%PM_MODULE%" goto END
+
+:: Clean out broken PM_MODULE_DIR if it exists
+if exist "%PM_MODULE_DIR%" ( rd /s /q "%PM_MODULE_DIR%" > nul )
+
+set PM_MODULE_PACKAGE=packman-common@%PM_PACKMAN_VERSION%.zip
+for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do set TEMP_FILE_NAME=%%a
+set TARGET=%TEMP_FILE_NAME%
+call "%~dp0fetch_file_from_packman_bootstrap.cmd" %PM_MODULE_PACKAGE% "%TARGET%"
+if %errorlevel% neq 0 (
+ echo !!! Error fetching packman from CDN !!!
+ goto ERROR
+)
+
+echo Unpacking ...
+"%PM_PYTHON%" -S -s -u -E "%~dp0\install_package.py" "%TARGET%" "%PM_MODULE_DIR%"
+if %errorlevel% neq 0 (
+ echo !!! Error unpacking packman !!!
+ goto ERROR
+)
+
+del "%TARGET%"
+
+goto END
+
+:ERROR_MKDIR_PACKAGES_ROOT
+echo Failed to automatically create packman packages repo at %PM_PACKAGES_ROOT%.
+echo Please set a location explicitly that packman has permission to write to, by issuing:
+echo.
+echo setx PM_PACKAGES_ROOT {path-you-choose-for-storing-packman-packages-locally}
+echo.
+echo Then launch a new command console for the changes to take effect and run packman command again.
+exit /B %errorlevel%
+
+:ERROR
+echo !!! Failure while configuring local machine :( !!!
+exit /B %errorlevel%
+
+:CLEAN_UP_TEMP_FOLDER
+rd /S /Q "%TEMP_FOLDER_NAME%"
+exit /B
+
+:CREATE_PYTHON_BASE_DIR
+:: We ignore errors and clean error state - if two processes create the directory one will fail which is fine
+md "%PM_PYTHON_BASE_DIR%" > nul 2>&1
+exit /B 0
+
+:END
diff --git a/buildtools/packman/bootstrap/download_file_from_url.ps1 b/buildtools/packman/bootstrap/download_file_from_url.ps1
new file mode 100644
index 0000000..df55745
--- /dev/null
+++ b/buildtools/packman/bootstrap/download_file_from_url.ps1
@@ -0,0 +1,53 @@
+<#
+Copyright 2019 NVIDIA CORPORATION
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+#>
+
+param(
+[Parameter(Mandatory=$true)][string]$source=$null,
+[string]$output="out.exe"
+)
+$filename = $output
+
+$triesLeft = 4
+$delay = 2
+do
+{
+ $triesLeft -= 1
+
+ try
+ {
+ Write-Host "Downloading from bootstrap.packman.nvidia.com ..."
+ $wc = New-Object net.webclient
+ $wc.Downloadfile($source, $fileName)
+ exit 0
+ }
+ catch
+ {
+ Write-Host "Error downloading $source!"
+ Write-Host $_.Exception|format-list -force
+ if ($triesLeft)
+ {
+ Write-Host "Retrying in $delay seconds ..."
+ Start-Sleep -seconds $delay
+ }
+ $delay = $delay * $delay
+ }
+} while ($triesLeft -gt 0)
+# We only get here if the retries have been exhausted, remove any left-overs:
+if (Test-Path $fileName)
+{
+ Remove-Item $fileName
+}
+exit 1 \ No newline at end of file
diff --git a/buildtools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd b/buildtools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd
new file mode 100644
index 0000000..bf3a88d
--- /dev/null
+++ b/buildtools/packman/bootstrap/fetch_file_from_packman_bootstrap.cmd
@@ -0,0 +1,35 @@
+:: Copyright 2019 NVIDIA CORPORATION
+::
+:: Licensed under the Apache License, Version 2.0 (the "License");
+:: you may not use this file except in compliance with the License.
+:: You may obtain a copy of the License at
+::
+:: http://www.apache.org/licenses/LICENSE-2.0
+::
+:: Unless required by applicable law or agreed to in writing, software
+:: distributed under the License is distributed on an "AS IS" BASIS,
+:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+:: See the License for the specific language governing permissions and
+:: limitations under the License.
+
+:: You need to specify <package-name> <target-path> as input to this command
+@setlocal
+@set PACKAGE_NAME=%1
+@set TARGET_PATH=%2
+
+@echo Fetching %PACKAGE_NAME% ...
+
+@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0download_file_from_url.ps1" ^
+ -source "http://bootstrap.packman.nvidia.com/%PACKAGE_NAME%" -output %TARGET_PATH%
+:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option
+:: We must therefore do our own failure analysis, basically make sure the file exists:
+@if not exist %TARGET_PATH% goto ERROR_DOWNLOAD_FAILED
+
+@endlocal
+@exit /b 0
+
+:ERROR_DOWNLOAD_FAILED
+@echo Failed to download file from S3
+@echo Most likely because endpoint cannot be reached or file %PACKAGE_NAME% doesn't exist
+@endlocal
+@exit /b 1 \ No newline at end of file
diff --git a/buildtools/packman/bootstrap/generate_temp_file_name.ps1 b/buildtools/packman/bootstrap/generate_temp_file_name.ps1
new file mode 100644
index 0000000..aa3f004
--- /dev/null
+++ b/buildtools/packman/bootstrap/generate_temp_file_name.ps1
@@ -0,0 +1,161 @@
+<#
+Copyright 2019 NVIDIA CORPORATION
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+#>
+
+$out = [System.IO.Path]::GetTempFileName()
+Write-Host $out
+# SIG # Begin signature block
+# MIIaVwYJKoZIhvcNAQcCoIIaSDCCGkQCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCAK+Ewup1N0/mdf
+# 1l4R58rxyumHgZvTmEhrYTb2Zf0zd6CCCiIwggTTMIIDu6ADAgECAhBi50XpIWUh
+# PJcfXEkK6hKlMA0GCSqGSIb3DQEBCwUAMIGEMQswCQYDVQQGEwJVUzEdMBsGA1UE
+# ChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0
+# IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENsYXNzIDMgU0hBMjU2IENvZGUg
+# U2lnbmluZyBDQSAtIEcyMB4XDTE4MDcwOTAwMDAwMFoXDTIxMDcwOTIzNTk1OVow
+# gYMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+# YW50YSBDbGFyYTEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMQ8wDQYDVQQL
+# DAZJVC1NSVMxGzAZBgNVBAMMEk5WSURJQSBDb3Jwb3JhdGlvbjCCASIwDQYJKoZI
+# hvcNAQEBBQADggEPADCCAQoCggEBALEZN63dA47T4i90jZ84CJ/aWUwVtLff8AyP
+# YspFfIZGdZYiMgdb8A5tBh7653y0G/LZL6CVUkgejcpvBU/Dl/52a+gSWy2qJ2bH
+# jMFMKCyQDhdpCAKMOUKSC9rfzm4cFeA9ct91LQCAait4LhLlZt/HF7aG+r0FgCZa
+# HJjJvE7KNY9G4AZXxjSt8CXS8/8NQMANqjLX1r+F+Hl8PzQ1fVx0mMsbdtaIV4Pj
+# 5flAeTUnz6+dCTx3vTUo8MYtkS2UBaQv7t7H2B7iwJDakEQKk1XHswJdeqG0osDU
+# z6+NVks7uWE1N8UIhvzbw0FEX/U2kpfyWaB/J3gMl8rVR8idPj8CAwEAAaOCAT4w
+# ggE6MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
+# BwMDMGEGA1UdIARaMFgwVgYGZ4EMAQQBMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v
+# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5j
+# b20vcnBhMB8GA1UdIwQYMBaAFNTABiJJ6zlL3ZPiXKG4R3YJcgNYMCsGA1UdHwQk
+# MCIwIKAeoByGGmh0dHA6Ly9yYi5zeW1jYi5jb20vcmIuY3JsMFcGCCsGAQUFBwEB
+# BEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3JiLnN5bWNkLmNvbTAmBggrBgEFBQcw
+# AoYaaHR0cDovL3JiLnN5bWNiLmNvbS9yYi5jcnQwDQYJKoZIhvcNAQELBQADggEB
+# AIJKh5vKJdhHJtMzATmc1BmXIQ3RaJONOZ5jMHn7HOkYU1JP0OIzb4pXXkH8Xwfr
+# K6bnd72IhcteyksvKsGpSvK0PBBwzodERTAu1Os2N+EaakxQwV/xtqDm1E3IhjHk
+# fRshyKKzmFk2Ci323J4lHtpWUj5Hz61b8gd72jH7xnihGi+LORJ2uRNZ3YuqMNC3
+# SBC8tAyoJqEoTJirULUCXW6wX4XUm5P2sx+htPw7szGblVKbQ+PFinNGnsSEZeKz
+# D8jUb++1cvgTKH59Y6lm43nsJjkZU77tNqyq4ABwgQRk6lt8cS2PPwjZvTmvdnla
+# ZhR0K4of+pQaUQHXVIBdji8wggVHMIIEL6ADAgECAhB8GzU1SufbdOdBXxFpymuo
+# MA0GCSqGSIb3DQEBCwUAMIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNp
+# Z24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
+# BAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+# IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmlj
+# YXRpb24gQXV0aG9yaXR5MB4XDTE0MDcyMjAwMDAwMFoXDTI0MDcyMTIzNTk1OVow
+# gYQxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEf
+# MB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazE1MDMGA1UEAxMsU3ltYW50
+# ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBTaWduaW5nIENBIC0gRzIwggEiMA0GCSqG
+# SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXlUPU3N9nrjn7UqS2JjEEcOm3jlsqujdp
+# NZWPu8Aw54bYc7vf69F2P4pWjustS/BXGE6xjaUz0wt1I9VqeSfdo9P3Dodltd6t
+# HPH1NbQiUa8iocFdS5B/wFlOq515qQLXHkmxO02H/sJ4q7/vUq6crwjZOeWaUT5p
+# XzAQTnFjbFjh8CAzGw90vlvLEuHbjMSAlHK79kWansElC/ujHJ7YpglwcezAR0yP
+# fcPeGc4+7gRyjhfT//CyBTIZTNOwHJ/+pXggQnBBsCaMbwDIOgARQXpBsKeKkQSg
+# mXj0d7TzYCrmbFAEtxRg/w1R9KiLhP4h2lxeffUpeU+wRHRvbXL/AgMBAAGjggF4
+# MIIBdDAuBggrBgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNk
+# LmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEH
+# FwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYB
+# BQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwNgYDVR0fBC8wLTAroCmg
+# J4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUE
+# DDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAY
+# BgNVBAMTEVN5bWFudGVjUEtJLTEtNzI0MB0GA1UdDgQWBBTUwAYiSes5S92T4lyh
+# uEd2CXIDWDAfBgNVHSMEGDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG
+# 9w0BAQsFAAOCAQEAf+vKp+qLdkLrPo4gVDDjt7nc+kg+FscPRZUQzSeGo2bzAu1x
+# +KrCVZeRcIP5Un5SaTzJ8eCURoAYu6HUpFam8x0AkdWG80iH4MvENGggXrTL+QXt
+# nK9wUye56D5+UaBpcYvcUe2AOiUyn0SvbkMo0yF1u5fYi4uM/qkERgSF9xWcSxGN
+# xCwX/tVuf5riVpLxlrOtLfn039qJmc6yOETA90d7yiW5+ipoM5tQct6on9TNLAs0
+# vYsweEDgjY4nG5BvGr4IFYFd6y/iUedRHsl4KeceZb847wFKAQkkDhbEFHnBQTc0
+# 0D2RUpSd4WjvCPDiaZxnbpALGpNx1CYCw8BaIzGCD4swgg+HAgEBMIGZMIGEMQsw
+# CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+# BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENs
+# YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQSAtIEcyAhBi50XpIWUhPJcfXEkK
+# 6hKlMA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcN
+# AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw
+# LwYJKoZIhvcNAQkEMSIEIPW+EpFrZSdzrjFFo0UT+PzFeYn/GcWNyWFaU/JMrMfR
+# MA0GCSqGSIb3DQEBAQUABIIBAA8fmU/RJcF9t60DZZAjf8FB3EZddOaHgI9z40nV
+# CnfTGi0OEYU48Pe9jkQQV2fABpACfW74xmNv3QNgP2qP++mkpKBVv28EIAuINsFt
+# YAITEljLN/VOVul8lvjxar5GSFFgpE5F6j4xcvI69LuCWbN8cteTVsBGg+eGmjfx
+# QZxP252z3FqPN+mihtFegF2wx6Mg6/8jZjkO0xjBOwSdpTL4uyQfHvaPBKXuWxRx
+# ioXw4ezGAwkuBoxWK8UG7Qu+7CSfQ3wMOjvyH2+qn30lWEsvRMdbGAp7kvfr3EGZ
+# a3WN7zXZ+6KyZeLeEH7yCDzukAjptaY/+iLVjJsuzC6tCSqhgg1EMIINQAYKKwYB
+# BAGCNwMDATGCDTAwgg0sBgkqhkiG9w0BBwKggg0dMIINGQIBAzEPMA0GCWCGSAFl
+# AwQCAQUAMHcGCyqGSIb3DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglg
+# hkgBZQMEAgEFAAQg14BnPazQkW9whhZu1d0bC3lqqScvxb3SSb1QT8e3Xg0CEFhw
+# aMBZ2hExXhr79A9+bXEYDzIwMjEwNDA4MDkxMTA5WqCCCjcwggT+MIID5qADAgEC
+# AhANQkrgvjqI/2BAIc4UAPDdMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVT
+# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+# b20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBp
+# bmcgQ0EwHhcNMjEwMTAxMDAwMDAwWhcNMzEwMTA2MDAwMDAwWjBIMQswCQYDVQQG
+# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0
+# IFRpbWVzdGFtcCAyMDIxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+# wuZhhGfFivUNCKRFymNrUdc6EUK9CnV1TZS0DFC1JhD+HchvkWsMlucaXEjvROW/
+# m2HNFZFiWrj/ZwucY/02aoH6KfjdK3CF3gIY83htvH35x20JPb5qdofpir34hF0e
+# dsnkxnZ2OlPR0dNaNo/Go+EvGzq3YdZz7E5tM4p8XUUtS7FQ5kE6N1aG3JMjjfdQ
+# Jehk5t3Tjy9XtYcg6w6OLNUj2vRNeEbjA4MxKUpcDDGKSoyIxfcwWvkUrxVfbENJ
+# Cf0mI1P2jWPoGqtbsR0wwptpgrTb/FZUvB+hh6u+elsKIC9LCcmVp42y+tZji06l
+# chzun3oBc/gZ1v4NSYS9AQIDAQABo4IBuDCCAbQwDgYDVR0PAQH/BAQDAgeAMAwG
+# A1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwQQYDVR0gBDowODA2
+# BglghkgBhv1sBwEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5j
+# b20vQ1BTMB8GA1UdIwQYMBaAFPS24SAd/imu0uRhpbKiJbLIFzVuMB0GA1UdDgQW
+# BBQ2RIaOpLqwZr68KC0dRDbd42p6vDBxBgNVHR8EajBoMDKgMKAuhixodHRwOi8v
+# Y3JsMy5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRzLmNybDAyoDCgLoYsaHR0
+# cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC10cy5jcmwwgYUGCCsG
+# AQUFBwEBBHkwdzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t
+# ME8GCCsGAQUFBzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl
+# cnRTSEEyQXNzdXJlZElEVGltZXN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUA
+# A4IBAQBIHNy16ZojvOca5yAOjmdG/UJyUXQKI0ejq5LSJcRwWb4UoOUngaVNFBUZ
+# B3nw0QTDhtk7vf5EAmZN7WmkD/a4cM9i6PVRSnh5Nnont/PnUp+Tp+1DnnvntN1B
+# Ion7h6JGA0789P63ZHdjXyNSaYOC+hpT7ZDMjaEXcw3082U5cEvznNZ6e9oMvD0y
+# 0BvL9WH8dQgAdryBDvjA4VzPxBFy5xtkSdgimnUVQvUtMjiB2vRgorq0Uvtc4GEk
+# JU+y38kpqHNDUdq9Y9YfW5v3LhtPEx33Sg1xfpe39D+E68Hjo0mh+s6nv1bPull2
+# YYlffqe0jmd4+TaY4cso2luHpoovMIIFMTCCBBmgAwIBAgIQCqEl1tYyG35B5AXa
+# NpfCFTANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGln
+# aUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtE
+# aWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMTYwMTA3MTIwMDAwWhcNMzEw
+# MTA3MTIwMDAwWjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j
+# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBT
+# SEEyIEFzc3VyZWQgSUQgVGltZXN0YW1waW5nIENBMIIBIjANBgkqhkiG9w0BAQEF
+# AAOCAQ8AMIIBCgKCAQEAvdAy7kvNj3/dqbqCmcU5VChXtiNKxA4HRTNREH3Q+X1N
+# aH7ntqD0jbOI5Je/YyGQmL8TvFfTw+F+CNZqFAA49y4eO+7MpvYyWf5fZT/gm+vj
+# RkcGGlV+Cyd+wKL1oODeIj8O/36V+/OjuiI+GKwR5PCZA207hXwJ0+5dyJoLVOOo
+# CXFr4M8iEA91z3FyTgqt30A6XLdR4aF5FMZNJCMwXbzsPGBqrC8HzP3w6kfZiFBe
+# /WZuVmEnKYmEUeaC50ZQ/ZQqLKfkdT66mA+Ef58xFNat1fJky3seBdCEGXIX8RcG
+# 7z3N1k3vBkL9olMqT4UdxB08r8/arBD13ays6Vb/kwIDAQABo4IBzjCCAcowHQYD
+# VR0OBBYEFPS24SAd/imu0uRhpbKiJbLIFzVuMB8GA1UdIwQYMBaAFEXroq/0ksuC
+# MS1Ri6enIZ3zbcgPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcw
+# AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8v
+# Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0
+# MIGBBgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGln
+# aUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsMy5kaWdp
+# Y2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMFAGA1UdIARJMEcw
+# OAYKYIZIAYb9bAACBDAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2Vy
+# dC5jb20vQ1BTMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAQEAcZUS6VGH
+# VmnN793afKpjerN4zwY3QITvS4S/ys8DAv3Fp8MOIEIsr3fzKx8MIVoqtwU0HWqu
+# mfgnoma/Capg33akOpMP+LLR2HwZYuhegiUexLoceywh4tZbLBQ1QwRostt1AuBy
+# x5jWPGTlH0gQGF+JOGFNYkYkh2OMkVIsrymJ5Xgf1gsUpYDXEkdws3XVk4WTfraS
+# Z/tTYYmo9WuWwPRYaQ18yAGxuSh1t5ljhSKMYcp5lH5Z/IwP42+1ASa2bKXuh1Eh
+# 5Fhgm7oMLSttosR+u8QlK0cCCHxJrhO24XxCQijGGFbPQTS2Zl22dHv1VjMiLyI2
+# skuiSpXY9aaOUjGCAk0wggJJAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV
+# BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0ECEA1C
+# SuC+Ooj/YEAhzhQA8N0wDQYJYIZIAWUDBAIBBQCggZgwGgYJKoZIhvcNAQkDMQ0G
+# CyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMTA0MDgwOTExMDlaMCsGCyqG
+# SIb3DQEJEAIMMRwwGjAYMBYEFOHXgqjhkb7va8oWkbWqtJSmJJvzMC8GCSqGSIb3
+# DQEJBDEiBCCHEAmNNj2zWjWYRfEi4FgzZvrI16kv/U2b9b3oHw6UVDANBgkqhkiG
+# 9w0BAQEFAASCAQCdefEKh6Qmwx7xGCkrYi/A+/Cla6LdnYJp38eMs3fqTTvjhyDw
+# HffXrwdqWy5/fgW3o3qJXqa5o7hLxYIoWSULOCpJRGdt+w7XKPAbZqHrN9elAhWJ
+# vpBTCEaj7dVxr1Ka4NsoPSYe0eidDBmmvGvp02J4Z1j8+ImQPKN6Hv/L8Ixaxe7V
+# mH4VtXIiBK8xXdi4wzO+A+qLtHEJXz3Gw8Bp3BNtlDGIUkIhVTM3Q1xcSEqhOLqo
+# PGdwCw9acxdXNWWPjOJkNH656Bvmkml+0p6MTGIeG4JCeRh1Wpqm1ZGSoEcXNaof
+# wOgj48YzI+dNqBD9i7RSWCqJr2ygYKRTxnuU
+# SIG # End signature block
diff --git a/buildtools/packman/bootstrap/generate_temp_folder.ps1 b/buildtools/packman/bootstrap/generate_temp_folder.ps1
new file mode 100644
index 0000000..d34fc9c
--- /dev/null
+++ b/buildtools/packman/bootstrap/generate_temp_folder.ps1
@@ -0,0 +1,167 @@
+<#
+Copyright 2019 NVIDIA CORPORATION
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+#>
+
+param(
+[Parameter(Mandatory=$true)][string]$parentPath=$null
+)
+[string] $name = [System.Guid]::NewGuid()
+$out = Join-Path $parentPath $name
+New-Item -ItemType Directory -Path ($out) | Out-Null
+Write-Host $out
+
+# SIG # Begin signature block
+# MIIaVwYJKoZIhvcNAQcCoIIaSDCCGkQCAQExDzANBglghkgBZQMEAgEFADB5Bgor
+# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
+# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCB29nsqMEu+VmSF
+# 7ckeVTPrEZ6hsXjOgPFlJm9ilgHUB6CCCiIwggTTMIIDu6ADAgECAhBi50XpIWUh
+# PJcfXEkK6hKlMA0GCSqGSIb3DQEBCwUAMIGEMQswCQYDVQQGEwJVUzEdMBsGA1UE
+# ChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNVBAsTFlN5bWFudGVjIFRydXN0
+# IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENsYXNzIDMgU0hBMjU2IENvZGUg
+# U2lnbmluZyBDQSAtIEcyMB4XDTE4MDcwOTAwMDAwMFoXDTIxMDcwOTIzNTk1OVow
+# gYMxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRQwEgYDVQQHDAtT
+# YW50YSBDbGFyYTEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMQ8wDQYDVQQL
+# DAZJVC1NSVMxGzAZBgNVBAMMEk5WSURJQSBDb3Jwb3JhdGlvbjCCASIwDQYJKoZI
+# hvcNAQEBBQADggEPADCCAQoCggEBALEZN63dA47T4i90jZ84CJ/aWUwVtLff8AyP
+# YspFfIZGdZYiMgdb8A5tBh7653y0G/LZL6CVUkgejcpvBU/Dl/52a+gSWy2qJ2bH
+# jMFMKCyQDhdpCAKMOUKSC9rfzm4cFeA9ct91LQCAait4LhLlZt/HF7aG+r0FgCZa
+# HJjJvE7KNY9G4AZXxjSt8CXS8/8NQMANqjLX1r+F+Hl8PzQ1fVx0mMsbdtaIV4Pj
+# 5flAeTUnz6+dCTx3vTUo8MYtkS2UBaQv7t7H2B7iwJDakEQKk1XHswJdeqG0osDU
+# z6+NVks7uWE1N8UIhvzbw0FEX/U2kpfyWaB/J3gMl8rVR8idPj8CAwEAAaOCAT4w
+# ggE6MAkGA1UdEwQCMAAwDgYDVR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUF
+# BwMDMGEGA1UdIARaMFgwVgYGZ4EMAQQBMEwwIwYIKwYBBQUHAgEWF2h0dHBzOi8v
+# ZC5zeW1jYi5jb20vY3BzMCUGCCsGAQUFBwICMBkMF2h0dHBzOi8vZC5zeW1jYi5j
+# b20vcnBhMB8GA1UdIwQYMBaAFNTABiJJ6zlL3ZPiXKG4R3YJcgNYMCsGA1UdHwQk
+# MCIwIKAeoByGGmh0dHA6Ly9yYi5zeW1jYi5jb20vcmIuY3JsMFcGCCsGAQUFBwEB
+# BEswSTAfBggrBgEFBQcwAYYTaHR0cDovL3JiLnN5bWNkLmNvbTAmBggrBgEFBQcw
+# AoYaaHR0cDovL3JiLnN5bWNiLmNvbS9yYi5jcnQwDQYJKoZIhvcNAQELBQADggEB
+# AIJKh5vKJdhHJtMzATmc1BmXIQ3RaJONOZ5jMHn7HOkYU1JP0OIzb4pXXkH8Xwfr
+# K6bnd72IhcteyksvKsGpSvK0PBBwzodERTAu1Os2N+EaakxQwV/xtqDm1E3IhjHk
+# fRshyKKzmFk2Ci323J4lHtpWUj5Hz61b8gd72jH7xnihGi+LORJ2uRNZ3YuqMNC3
+# SBC8tAyoJqEoTJirULUCXW6wX4XUm5P2sx+htPw7szGblVKbQ+PFinNGnsSEZeKz
+# D8jUb++1cvgTKH59Y6lm43nsJjkZU77tNqyq4ABwgQRk6lt8cS2PPwjZvTmvdnla
+# ZhR0K4of+pQaUQHXVIBdji8wggVHMIIEL6ADAgECAhB8GzU1SufbdOdBXxFpymuo
+# MA0GCSqGSIb3DQEBCwUAMIG9MQswCQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNp
+# Z24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNV
+# BAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
+# IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmlj
+# YXRpb24gQXV0aG9yaXR5MB4XDTE0MDcyMjAwMDAwMFoXDTI0MDcyMTIzNTk1OVow
+# gYQxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRTeW1hbnRlYyBDb3Jwb3JhdGlvbjEf
+# MB0GA1UECxMWU3ltYW50ZWMgVHJ1c3QgTmV0d29yazE1MDMGA1UEAxMsU3ltYW50
+# ZWMgQ2xhc3MgMyBTSEEyNTYgQ29kZSBTaWduaW5nIENBIC0gRzIwggEiMA0GCSqG
+# SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDXlUPU3N9nrjn7UqS2JjEEcOm3jlsqujdp
+# NZWPu8Aw54bYc7vf69F2P4pWjustS/BXGE6xjaUz0wt1I9VqeSfdo9P3Dodltd6t
+# HPH1NbQiUa8iocFdS5B/wFlOq515qQLXHkmxO02H/sJ4q7/vUq6crwjZOeWaUT5p
+# XzAQTnFjbFjh8CAzGw90vlvLEuHbjMSAlHK79kWansElC/ujHJ7YpglwcezAR0yP
+# fcPeGc4+7gRyjhfT//CyBTIZTNOwHJ/+pXggQnBBsCaMbwDIOgARQXpBsKeKkQSg
+# mXj0d7TzYCrmbFAEtxRg/w1R9KiLhP4h2lxeffUpeU+wRHRvbXL/AgMBAAGjggF4
+# MIIBdDAuBggrBgEFBQcBAQQiMCAwHgYIKwYBBQUHMAGGEmh0dHA6Ly9zLnN5bWNk
+# LmNvbTASBgNVHRMBAf8ECDAGAQH/AgEAMGYGA1UdIARfMF0wWwYLYIZIAYb4RQEH
+# FwMwTDAjBggrBgEFBQcCARYXaHR0cHM6Ly9kLnN5bWNiLmNvbS9jcHMwJQYIKwYB
+# BQUHAgIwGRoXaHR0cHM6Ly9kLnN5bWNiLmNvbS9ycGEwNgYDVR0fBC8wLTAroCmg
+# J4YlaHR0cDovL3Muc3ltY2IuY29tL3VuaXZlcnNhbC1yb290LmNybDATBgNVHSUE
+# DDAKBggrBgEFBQcDAzAOBgNVHQ8BAf8EBAMCAQYwKQYDVR0RBCIwIKQeMBwxGjAY
+# BgNVBAMTEVN5bWFudGVjUEtJLTEtNzI0MB0GA1UdDgQWBBTUwAYiSes5S92T4lyh
+# uEd2CXIDWDAfBgNVHSMEGDAWgBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG
+# 9w0BAQsFAAOCAQEAf+vKp+qLdkLrPo4gVDDjt7nc+kg+FscPRZUQzSeGo2bzAu1x
+# +KrCVZeRcIP5Un5SaTzJ8eCURoAYu6HUpFam8x0AkdWG80iH4MvENGggXrTL+QXt
+# nK9wUye56D5+UaBpcYvcUe2AOiUyn0SvbkMo0yF1u5fYi4uM/qkERgSF9xWcSxGN
+# xCwX/tVuf5riVpLxlrOtLfn039qJmc6yOETA90d7yiW5+ipoM5tQct6on9TNLAs0
+# vYsweEDgjY4nG5BvGr4IFYFd6y/iUedRHsl4KeceZb847wFKAQkkDhbEFHnBQTc0
+# 0D2RUpSd4WjvCPDiaZxnbpALGpNx1CYCw8BaIzGCD4swgg+HAgEBMIGZMIGEMQsw
+# CQYDVQQGEwJVUzEdMBsGA1UEChMUU3ltYW50ZWMgQ29ycG9yYXRpb24xHzAdBgNV
+# BAsTFlN5bWFudGVjIFRydXN0IE5ldHdvcmsxNTAzBgNVBAMTLFN5bWFudGVjIENs
+# YXNzIDMgU0hBMjU2IENvZGUgU2lnbmluZyBDQSAtIEcyAhBi50XpIWUhPJcfXEkK
+# 6hKlMA0GCWCGSAFlAwQCAQUAoHwwEAYKKwYBBAGCNwIBDDECMAAwGQYJKoZIhvcN
+# AQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwGCisGAQQBgjcCARUw
+# LwYJKoZIhvcNAQkEMSIEIG5YDmcpqLxn4SB0H6OnuVkZRPh6OJ77eGW/6Su/uuJg
+# MA0GCSqGSIb3DQEBAQUABIIBAA3N2vqfA6WDgqz/7EoAKVIE5Hn7xpYDGhPvFAMV
+# BslVpeqE3apTcYFCEcwLtzIEc/zmpULxsX8B0SUT2VXbJN3zzQ80b+gbgpq62Zk+
+# dQLOtLSiPhGW7MXLahgES6Oc2dUFaQ+wDfcelkrQaOVZkM4wwAzSapxuf/13oSIk
+# ZX2ewQEwTZrVYXELO02KQIKUR30s/oslGVg77ALnfK9qSS96Iwjd4MyT7PzCkHUi
+# ilwyGJi5a4ofiULiPSwUQNynSBqxa+JQALkHP682b5xhjoDfyG8laR234FTPtYgs
+# P/FaeviwENU5Pl+812NbbtRD+gKlWBZz+7FKykOT/CG8sZahgg1EMIINQAYKKwYB
+# BAGCNwMDATGCDTAwgg0sBgkqhkiG9w0BBwKggg0dMIINGQIBAzEPMA0GCWCGSAFl
+# AwQCAQUAMHcGCyqGSIb3DQEJEAEEoGgEZjBkAgEBBglghkgBhv1sBwEwMTANBglg
+# hkgBZQMEAgEFAAQgJhABfkDIPbI+nWYnA30FLTyaPK+W3QieT21B/vK+CMICEDF0
+# worcGsdd7OxpXLP60xgYDzIwMjEwNDA4MDkxMTA5WqCCCjcwggT+MIID5qADAgEC
+# AhANQkrgvjqI/2BAIc4UAPDdMA0GCSqGSIb3DQEBCwUAMHIxCzAJBgNVBAYTAlVT
+# MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+# b20xMTAvBgNVBAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBp
+# bmcgQ0EwHhcNMjEwMTAxMDAwMDAwWhcNMzEwMTA2MDAwMDAwWjBIMQswCQYDVQQG
+# EwJVUzEXMBUGA1UEChMORGlnaUNlcnQsIEluYy4xIDAeBgNVBAMTF0RpZ2lDZXJ0
+# IFRpbWVzdGFtcCAyMDIxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+# wuZhhGfFivUNCKRFymNrUdc6EUK9CnV1TZS0DFC1JhD+HchvkWsMlucaXEjvROW/
+# m2HNFZFiWrj/ZwucY/02aoH6KfjdK3CF3gIY83htvH35x20JPb5qdofpir34hF0e
+# dsnkxnZ2OlPR0dNaNo/Go+EvGzq3YdZz7E5tM4p8XUUtS7FQ5kE6N1aG3JMjjfdQ
+# Jehk5t3Tjy9XtYcg6w6OLNUj2vRNeEbjA4MxKUpcDDGKSoyIxfcwWvkUrxVfbENJ
+# Cf0mI1P2jWPoGqtbsR0wwptpgrTb/FZUvB+hh6u+elsKIC9LCcmVp42y+tZji06l
+# chzun3oBc/gZ1v4NSYS9AQIDAQABo4IBuDCCAbQwDgYDVR0PAQH/BAQDAgeAMAwG
+# A1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwgwQQYDVR0gBDowODA2
+# BglghkgBhv1sBwEwKTAnBggrBgEFBQcCARYbaHR0cDovL3d3dy5kaWdpY2VydC5j
+# b20vQ1BTMB8GA1UdIwQYMBaAFPS24SAd/imu0uRhpbKiJbLIFzVuMB0GA1UdDgQW
+# BBQ2RIaOpLqwZr68KC0dRDbd42p6vDBxBgNVHR8EajBoMDKgMKAuhixodHRwOi8v
+# Y3JsMy5kaWdpY2VydC5jb20vc2hhMi1hc3N1cmVkLXRzLmNybDAyoDCgLoYsaHR0
+# cDovL2NybDQuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC10cy5jcmwwgYUGCCsG
+# AQUFBwEBBHkwdzAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29t
+# ME8GCCsGAQUFBzAChkNodHRwOi8vY2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNl
+# cnRTSEEyQXNzdXJlZElEVGltZXN0YW1waW5nQ0EuY3J0MA0GCSqGSIb3DQEBCwUA
+# A4IBAQBIHNy16ZojvOca5yAOjmdG/UJyUXQKI0ejq5LSJcRwWb4UoOUngaVNFBUZ
+# B3nw0QTDhtk7vf5EAmZN7WmkD/a4cM9i6PVRSnh5Nnont/PnUp+Tp+1DnnvntN1B
+# Ion7h6JGA0789P63ZHdjXyNSaYOC+hpT7ZDMjaEXcw3082U5cEvznNZ6e9oMvD0y
+# 0BvL9WH8dQgAdryBDvjA4VzPxBFy5xtkSdgimnUVQvUtMjiB2vRgorq0Uvtc4GEk
+# JU+y38kpqHNDUdq9Y9YfW5v3LhtPEx33Sg1xfpe39D+E68Hjo0mh+s6nv1bPull2
+# YYlffqe0jmd4+TaY4cso2luHpoovMIIFMTCCBBmgAwIBAgIQCqEl1tYyG35B5AXa
+# NpfCFTANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGln
+# aUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtE
+# aWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMTYwMTA3MTIwMDAwWhcNMzEw
+# MTA3MTIwMDAwWjByMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5j
+# MRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBT
+# SEEyIEFzc3VyZWQgSUQgVGltZXN0YW1waW5nIENBMIIBIjANBgkqhkiG9w0BAQEF
+# AAOCAQ8AMIIBCgKCAQEAvdAy7kvNj3/dqbqCmcU5VChXtiNKxA4HRTNREH3Q+X1N
+# aH7ntqD0jbOI5Je/YyGQmL8TvFfTw+F+CNZqFAA49y4eO+7MpvYyWf5fZT/gm+vj
+# RkcGGlV+Cyd+wKL1oODeIj8O/36V+/OjuiI+GKwR5PCZA207hXwJ0+5dyJoLVOOo
+# CXFr4M8iEA91z3FyTgqt30A6XLdR4aF5FMZNJCMwXbzsPGBqrC8HzP3w6kfZiFBe
+# /WZuVmEnKYmEUeaC50ZQ/ZQqLKfkdT66mA+Ef58xFNat1fJky3seBdCEGXIX8RcG
+# 7z3N1k3vBkL9olMqT4UdxB08r8/arBD13ays6Vb/kwIDAQABo4IBzjCCAcowHQYD
+# VR0OBBYEFPS24SAd/imu0uRhpbKiJbLIFzVuMB8GA1UdIwQYMBaAFEXroq/0ksuC
+# MS1Ri6enIZ3zbcgPMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgGG
+# MBMGA1UdJQQMMAoGCCsGAQUFBwMIMHkGCCsGAQUFBwEBBG0wazAkBggrBgEFBQcw
+# AYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEMGCCsGAQUFBzAChjdodHRwOi8v
+# Y2FjZXJ0cy5kaWdpY2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3J0
+# MIGBBgNVHR8EejB4MDqgOKA2hjRodHRwOi8vY3JsNC5kaWdpY2VydC5jb20vRGln
+# aUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMDqgOKA2hjRodHRwOi8vY3JsMy5kaWdp
+# Y2VydC5jb20vRGlnaUNlcnRBc3N1cmVkSURSb290Q0EuY3JsMFAGA1UdIARJMEcw
+# OAYKYIZIAYb9bAACBDAqMCgGCCsGAQUFBwIBFhxodHRwczovL3d3dy5kaWdpY2Vy
+# dC5jb20vQ1BTMAsGCWCGSAGG/WwHATANBgkqhkiG9w0BAQsFAAOCAQEAcZUS6VGH
+# VmnN793afKpjerN4zwY3QITvS4S/ys8DAv3Fp8MOIEIsr3fzKx8MIVoqtwU0HWqu
+# mfgnoma/Capg33akOpMP+LLR2HwZYuhegiUexLoceywh4tZbLBQ1QwRostt1AuBy
+# x5jWPGTlH0gQGF+JOGFNYkYkh2OMkVIsrymJ5Xgf1gsUpYDXEkdws3XVk4WTfraS
+# Z/tTYYmo9WuWwPRYaQ18yAGxuSh1t5ljhSKMYcp5lH5Z/IwP42+1ASa2bKXuh1Eh
+# 5Fhgm7oMLSttosR+u8QlK0cCCHxJrhO24XxCQijGGFbPQTS2Zl22dHv1VjMiLyI2
+# skuiSpXY9aaOUjGCAk0wggJJAgEBMIGGMHIxCzAJBgNVBAYTAlVTMRUwEwYDVQQK
+# EwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20xMTAvBgNV
+# BAMTKERpZ2lDZXJ0IFNIQTIgQXNzdXJlZCBJRCBUaW1lc3RhbXBpbmcgQ0ECEA1C
+# SuC+Ooj/YEAhzhQA8N0wDQYJYIZIAWUDBAIBBQCggZgwGgYJKoZIhvcNAQkDMQ0G
+# CyqGSIb3DQEJEAEEMBwGCSqGSIb3DQEJBTEPFw0yMTA0MDgwOTExMDlaMCsGCyqG
+# SIb3DQEJEAIMMRwwGjAYMBYEFOHXgqjhkb7va8oWkbWqtJSmJJvzMC8GCSqGSIb3
+# DQEJBDEiBCDvFxQ6lYLr8vB+9czUl19rjCw1pWhhUXw/SqOmvIa/VDANBgkqhkiG
+# 9w0BAQEFAASCAQB9ox2UrcUXQsBI4Uycnhl4AMpvhVXJME62tygFMppW1l7QftDy
+# LvfPKRYm2YUioak/APxAS6geRKpeMkLvXuQS/Jlv0kY3BjxkeG0eVjvyjF4SvXbZ
+# 3JCk9m7wLNE+xqOo0ICjYlIJJgRLudjWkC5Skpb1NpPS8DOaIYwRV+AWaSOUPd9P
+# O5yVcnbl7OpK3EAEtwDrybCVBMPn2MGhAXybIHnth3+MFp1b6Blhz3WlReQyarjq
+# 1f+zaFB79rg6JswXoOTJhwICBP3hO2Ua3dMAswbfl+QNXF+igKLJPYnaeSVhBbm6
+# VCu2io27t4ixqvoD0RuPObNX/P3oVA38afiM
+# SIG # End signature block
diff --git a/buildtools/packman/bootstrap/install_package.py b/buildtools/packman/bootstrap/install_package.py
new file mode 100644
index 0000000..4542c4b
--- /dev/null
+++ b/buildtools/packman/bootstrap/install_package.py
@@ -0,0 +1,172 @@
+# Copyright 2019 NVIDIA CORPORATION
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import logging
+import zipfile
+import tempfile
+import sys
+import os
+import stat
+import time
+import hashlib
+from typing import Any, Callable, Union
+
+
+RENAME_RETRY_COUNT = 100
+RENAME_RETRY_DELAY = 0.1
+
+logging.basicConfig(level=logging.WARNING, format="%(message)s")
+logger = logging.getLogger("install_package")
+
+
+def remove_directory_item(path):
+ if os.path.islink(path) or os.path.isfile(path):
+ try:
+ os.remove(path)
+ except PermissionError:
+ # make sure we have access and try again:
+ os.chmod(path, stat.S_IRWXU)
+ os.remove(path)
+ else:
+ # try first to delete the dir because this will work for folder junctions, otherwise we would follow the junctions and cause destruction!
+ clean_out_folder = False
+ try:
+ # make sure we have access preemptively - this is necessary because recursing into a directory without permissions
+ # will only lead to heart ache
+ os.chmod(path, stat.S_IRWXU)
+ os.rmdir(path)
+ except OSError:
+ clean_out_folder = True
+
+ if clean_out_folder:
+ # we should make sure the directory is empty
+ names = os.listdir(path)
+ for name in names:
+ fullname = os.path.join(path, name)
+ remove_directory_item(fullname)
+ # now try to again get rid of the folder - and not catch if it raises:
+ os.rmdir(path)
+
+
+class StagingDirectory:
+ def __init__(self, staging_path):
+ self.staging_path = staging_path
+ self.temp_folder_path = None
+ os.makedirs(staging_path, exist_ok=True)
+
+ def __enter__(self):
+ self.temp_folder_path = tempfile.mkdtemp(prefix="ver-", dir=self.staging_path)
+ return self
+
+ def get_temp_folder_path(self):
+ return self.temp_folder_path
+
+ # this function renames the temp staging folder to folder_name, it is required that the parent path exists!
+ def promote_and_rename(self, folder_name):
+ abs_dst_folder_name = os.path.join(self.staging_path, folder_name)
+ os.rename(self.temp_folder_path, abs_dst_folder_name)
+
+ def __exit__(self, type, value, traceback):
+ # Remove temp staging folder if it's still there (something went wrong):
+ path = self.temp_folder_path
+ if os.path.isdir(path):
+ remove_directory_item(path)
+
+
+def rename_folder(staging_dir: StagingDirectory, folder_name: str):
+ try:
+ staging_dir.promote_and_rename(folder_name)
+ except OSError as exc:
+ # if we failed to rename because the folder now exists we can assume that another packman process
+ # has managed to update the package before us - in all other cases we re-raise the exception
+ abs_dst_folder_name = os.path.join(staging_dir.staging_path, folder_name)
+ if os.path.exists(abs_dst_folder_name):
+ logger.warning(
+ f"Directory {abs_dst_folder_name} already present, package installation already completed"
+ )
+ else:
+ raise
+
+
+def call_with_retry(
+ op_name: str, func: Callable, retry_count: int = 3, retry_delay: float = 20
+) -> Any:
+ retries_left = retry_count
+ while True:
+ try:
+ return func()
+ except (OSError, IOError) as exc:
+ logger.warning(f"Failure while executing {op_name} [{str(exc)}]")
+ if retries_left:
+ retry_str = "retry" if retries_left == 1 else "retries"
+ logger.warning(
+ f"Retrying after {retry_delay} seconds"
+ f" ({retries_left} {retry_str} left) ..."
+ )
+ time.sleep(retry_delay)
+ else:
+ logger.error("Maximum retries exceeded, giving up")
+ raise
+ retries_left -= 1
+
+
+def rename_folder_with_retry(staging_dir: StagingDirectory, folder_name):
+ dst_path = os.path.join(staging_dir.staging_path, folder_name)
+ call_with_retry(
+ f"rename {staging_dir.get_temp_folder_path()} -> {dst_path}",
+ lambda: rename_folder(staging_dir, folder_name),
+ RENAME_RETRY_COUNT,
+ RENAME_RETRY_DELAY,
+ )
+
+
+def generate_sha256_for_file(file_path: Union[str, os.PathLike]) -> str:
+ """Returns the SHA-256 hex digest for the file at `file_path`"""
+ hash = hashlib.sha256()
+ # Read the file in binary mode and update the hash object with data
+ with open(file_path, "rb") as file:
+ for chunk in iter(lambda: file.read(4096), b""):
+ hash.update(chunk)
+ return hash.hexdigest()
+
+
+def install_common_module(package_path, install_path):
+ COMMON_SHA256 = "0a2064434cca0170411c86f23349f9618556dc380d3589a2361db38ffeea9cac"
+ package_sha256 = generate_sha256_for_file(package_path)
+ if package_sha256 != COMMON_SHA256:
+ raise RuntimeError(
+ f"Package at '{package_path}' must have a sha256 of '{COMMON_SHA256}' "
+ f"but was found to have '{package_sha256}'"
+ )
+ staging_path, version = os.path.split(install_path)
+ with StagingDirectory(staging_path) as staging_dir:
+ output_folder = staging_dir.get_temp_folder_path()
+ with zipfile.ZipFile(package_path, allowZip64=True) as zip_file:
+ zip_file.extractall(output_folder)
+
+ # attempt the rename operation
+ rename_folder_with_retry(staging_dir, version)
+
+ print(f"Package successfully installed to {install_path}")
+
+
+if __name__ == "__main__":
+ executable_paths = os.getenv("PATH")
+ paths_list = executable_paths.split(os.path.pathsep) if executable_paths else []
+ target_path_np = os.path.normpath(sys.argv[2])
+ target_path_np_nc = os.path.normcase(target_path_np)
+ for exec_path in paths_list:
+ if os.path.normcase(os.path.normpath(exec_path)) == target_path_np_nc:
+ raise RuntimeError(f"packman will not install to executable path '{exec_path}'")
+ install_common_module(sys.argv[1], target_path_np)
diff --git a/buildtools/packman/config.packman.xml b/buildtools/packman/config.packman.xml
new file mode 100644
index 0000000..24ca05d
--- /dev/null
+++ b/buildtools/packman/config.packman.xml
@@ -0,0 +1,5 @@
+<config remotes="cloudfront">
+ <remote2 name="cloudfront">
+ <transport actions="download" protocol="https" packageLocation="d4i3qtqj3r0z5.cloudfront.net/${name}@${version}" />
+ </remote2>
+</config>
diff --git a/buildtools/packman/packman.cmd b/buildtools/packman/packman.cmd
new file mode 100644
index 0000000..e55b2f0
--- /dev/null
+++ b/buildtools/packman/packman.cmd
@@ -0,0 +1,89 @@
+:: RUN_PM_MODULE must always be at the same spot for packman update to work (batch reloads file during update!)
+:: [xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx]
+:: Reset errorlevel status (don't inherit from caller)
+@call :ECHO_AND_RESET_ERROR
+
+:: You can remove this section if you do your own manual configuration of the dev machines
+call :CONFIGURE
+if %errorlevel% neq 0 ( exit /b %errorlevel% )
+
+:: Everything below is mandatory
+if not defined PM_PYTHON goto :PYTHON_ENV_ERROR
+if not defined PM_MODULE goto :MODULE_ENV_ERROR
+
+set PM_VAR_PATH_ARG=
+
+if "%1"=="pull" goto :SET_VAR_PATH
+if "%1"=="install" goto :SET_VAR_PATH
+
+:RUN_PM_MODULE
+"%PM_PYTHON%" -S -s -u -E "%PM_MODULE%" %* %PM_VAR_PATH_ARG%
+if %errorlevel% neq 0 ( exit /b %errorlevel% )
+
+:: Marshall environment variables into the current environment if they have been generated and remove temporary file
+if exist "%PM_VAR_PATH%" (
+ for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do set "%%A"
+)
+if %errorlevel% neq 0 ( goto :VAR_ERROR )
+
+if exist "%PM_VAR_PATH%" (
+ del /F "%PM_VAR_PATH%"
+)
+if %errorlevel% neq 0 ( goto :VAR_ERROR )
+
+set PM_VAR_PATH=
+goto :eof
+
+:: Subroutines below
+:PYTHON_ENV_ERROR
+@echo User environment variable PM_PYTHON is not set! Please configure machine for packman or call configure.bat.
+exit /b 1
+
+:MODULE_ENV_ERROR
+@echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat.
+exit /b 1
+
+:VAR_ERROR
+@echo Error while processing and setting environment variables!
+exit /b 1
+
+:: pad [xxxx]
+:ECHO_AND_RESET_ERROR
+@echo off
+if /I "%PM_VERBOSITY%"=="debug" (
+ @echo on
+)
+exit /b 0
+
+:SET_VAR_PATH
+:: Generate temporary path for variable file
+for /f "delims=" %%a in ('%PM_PYTHON% -S -s -u -E -c "import tempfile;file = tempfile.NamedTemporaryFile(mode='w+t', delete=False);print(file.name)"') do (set PM_VAR_PATH=%%a)
+set PM_VAR_PATH_ARG=--var-path="%PM_VAR_PATH%"
+goto :RUN_PM_MODULE
+
+:CONFIGURE
+:: Must capture and set code page to work around issue #279, powershell invocation mutates console font
+:: This issue only happens in Windows CMD shell when using 65001 code page. Some Git Bash implementations
+:: don't support chcp so this workaround is a bit convoluted.
+:: Test for chcp:
+chcp > nul 2>&1
+if %errorlevel% equ 0 (
+ for /f "tokens=2 delims=:" %%a in ('chcp') do (set PM_OLD_CODE_PAGE=%%a)
+) else (
+ call :ECHO_AND_RESET_ERROR
+)
+:: trim leading space (this is safe even when PM_OLD_CODE_PAGE has not been set)
+set PM_OLD_CODE_PAGE=%PM_OLD_CODE_PAGE:~1%
+if "%PM_OLD_CODE_PAGE%" equ "65001" (
+ chcp 437 > nul
+ set PM_RESTORE_CODE_PAGE=1
+)
+call "%~dp0\bootstrap\configure.bat"
+set PM_CONFIG_ERRORLEVEL=%errorlevel%
+if defined PM_RESTORE_CODE_PAGE (
+ :: Restore code page
+ chcp %PM_OLD_CODE_PAGE% > nul
+)
+set PM_OLD_CODE_PAGE=
+set PM_RESTORE_CODE_PAGE=
+exit /b %PM_CONFIG_ERRORLEVEL%
diff --git a/buildtools/packman/packman.txt b/buildtools/packman/packman.txt
new file mode 100644
index 0000000..b222d30
--- /dev/null
+++ b/buildtools/packman/packman.txt
@@ -0,0 +1,192 @@
+#!/bin/bash
+
+# Copyright 2019-2023 NVIDIA CORPORATION
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+SAVED_SETTINGS="$-"
+set -eu
+
+if echo ${PM_VERBOSITY-} | grep -i "debug" > /dev/null ; then
+ set -x
+ PM_CURL_SILENT=""
+ PM_WGET_QUIET=""
+else
+ PM_CURL_SILENT="-s -S"
+ PM_WGET_QUIET="--quiet"
+fi
+export PM_PACKMAN_VERSION=7.23.1
+
+# This is necessary for newer macOS
+if [ `uname` == 'Darwin' ]; then
+ export LC_ALL=en_US.UTF-8
+ export LANG=en_US.UTF-8
+fi
+
+# We cannot rely on realpath, it isn't installed on macOS and some Linux distros
+get_abs_filename() {
+ echo "$(cd "$(dirname "$1")" && pwd)/$(basename "$1")"
+}
+
+# Specify where packman command exists
+export PM_INSTALL_PATH="$(get_abs_filename "$(dirname "${BASH_SOURCE}")")"
+
+# The packages root may already be configured by the user
+if [ -z "${PM_PACKAGES_ROOT:-}" ]; then
+ # Set variable temporarily in this process so that the following execution will work
+ if [ `uname` == 'Darwin' ]; then
+ export PM_PACKAGES_ROOT="${HOME}/Library/Application Support/packman-cache"
+ else
+ if [ -z "${XDG_CACHE_HOME:-}" ]; then
+ export PM_PACKAGES_ROOT="${HOME}/.cache/packman"
+ else
+ export PM_PACKAGES_ROOT="${XDG_CACHE_HOME}/packman"
+ fi
+ fi
+fi
+
+# Ensure the packages root path exists:
+if [ ! -d "$PM_PACKAGES_ROOT" ]; then
+ echo "Creating packman packages cache at $PM_PACKAGES_ROOT"
+ mkdir -p -m a+rwx "$PM_PACKAGES_ROOT"
+fi
+
+fetch_file_from_s3()
+{
+ SOURCE=$1
+ SOURCE_URL=http://bootstrap.packman.nvidia.com/$SOURCE
+ TARGET=$2
+ echo "Fetching $SOURCE from bootstrap.packman.nvidia.com ..."
+ if command -v wget >/dev/null 2>&1; then
+ wget $PM_WGET_QUIET -O$TARGET $SOURCE_URL
+ else
+ curl -o $TARGET $SOURCE_URL $PM_CURL_SILENT
+ fi
+}
+
+generate_temp_file_name()
+{
+ if [ `uname` == "Darwin" ]; then
+ local tmpfile=`mktemp -t packman`
+ else
+ local tmpfile=`mktemp -t packman.XXXXXXXX`
+ fi
+ echo "$tmpfile"
+}
+
+install_python()
+{
+ PLATFORM=`uname`
+ PROCESSOR=`uname -m`
+ PYTHON_VERSION=3.10.5-1
+
+ if [ $PLATFORM == 'Darwin' ]; then
+ PYTHON_PACKAGE=$PYTHON_VERSION-macos-x86_64
+ elif [ $PLATFORM == 'Linux' ] && [ $PROCESSOR == 'x86_64' ]; then
+ PYTHON_PACKAGE=$PYTHON_VERSION-linux-x86_64
+ elif [ $PLATFORM == 'Linux' ] && [ $PROCESSOR == 'aarch64' ]; then
+ PYTHON_PACKAGE=$PYTHON_VERSION-linux-aarch64
+ else
+ echo "Operating system not supported"
+ exit 1
+ fi
+
+ PYTHON_INSTALL_FOLDER="$PM_PACKAGES_ROOT/python/$PYTHON_PACKAGE"
+ if [ ! -d "$PYTHON_INSTALL_FOLDER" ]; then
+ mkdir -p "$PYTHON_INSTALL_FOLDER"
+ fi
+
+ export PM_PYTHON="$PYTHON_INSTALL_FOLDER/python"
+
+ if [ ! -f "$PM_PYTHON" ]; then
+ PYTHON_PACKAGE_TMP=$(generate_temp_file_name)
+ fetch_file_from_s3 "python@$PYTHON_PACKAGE.tar.gz" "$PYTHON_PACKAGE_TMP"
+ if [ "$?" -eq "0" ]; then
+ echo "Unpacking python"
+ tar -xf "$PYTHON_PACKAGE_TMP" -C "$PYTHON_INSTALL_FOLDER"
+ rm "$PYTHON_PACKAGE_TMP"
+ else
+ echo "Failed downloading the Python interpreter"
+ exit $?
+ fi
+ fi
+}
+
+# Ensure python is available:
+if [ -z "${PM_PYTHON_EXT:-}" ]; then
+ install_python
+else
+ PM_PYTHON="$PM_PYTHON_EXT"
+fi
+
+# The packman module may be externally configured
+if [ -z "${PM_MODULE_DIR_EXT:-}" ]; then
+ PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman-common/$PM_PACKMAN_VERSION"
+else
+ PM_MODULE_DIR="$PM_MODULE_DIR_EXT"
+fi
+export PM_MODULE="$PM_MODULE_DIR/run.py"
+
+# Ensure the packman package exists:
+if [ ! -f "$PM_MODULE" ]; then
+ # Remove a previously corrupt packman-common if it's there
+ if [ -d "$PM_MODULE_DIR" ]; then
+ rm -rf "$PM_MODULE_DIR"
+ fi
+ PM_MODULE_PACKAGE="packman-common@$PM_PACKMAN_VERSION.zip"
+ TARGET=$(generate_temp_file_name)
+ # We always fetch packman from S3:
+ fetch_file_from_s3 "$PM_MODULE_PACKAGE" "$TARGET"
+ if [ "$?" -eq "0" ]; then
+ echo "Unpacking ..."
+ "$PM_PYTHON" -S -s -u -E "$PM_INSTALL_PATH/bootstrap/install_package.py" "$TARGET" "$PM_MODULE_DIR"
+ rm "$TARGET"
+ else
+ echo "Failure while fetching packman module from S3!"
+ exit 1
+ fi
+fi
+
+# Generate temporary file name for environment variables:
+PM_VAR_PATH=`mktemp -u -t tmp.$$.pmvars.XXXXXX`
+
+if [ $# -ne 0 ]
+ then
+ PM_VAR_PATH_ARG=--var-path="$PM_VAR_PATH"
+fi
+
+"$PM_PYTHON" -S -s -u -E "$PM_MODULE" "$@" ${PM_VAR_PATH_ARG:-}
+exit_code=$?
+# Export the variables if the file was used and remove the file:
+if [ -f "$PM_VAR_PATH" ]; then
+ while read -r line
+ do
+ if [ ${#line} -gt 0 ]; then
+ export "$line"
+ fi
+ done < "$PM_VAR_PATH"
+ rm -f "$PM_VAR_PATH"
+fi
+
+# avoid leaking -e and -u into the host script if they weren't originally set
+if [[ ! ( "$SAVED_SETTINGS" =~ e ) ]]; then
+ set +e
+fi
+
+if [[ ! ( "$SAVED_SETTINGS" =~ u ) ]]; then
+ set +u
+fi
+
+# Return the exit code from python
+if [ "$exit_code" != 0 ]; then
+ exit "$exit_code"
+fi
diff --git a/buildtools/packman/python.bat b/buildtools/packman/python.bat
new file mode 100644
index 0000000..08df74f
--- /dev/null
+++ b/buildtools/packman/python.bat
@@ -0,0 +1,32 @@
+:: Copyright 2019-2020 NVIDIA CORPORATION
+::
+:: Licensed under the Apache License, Version 2.0 (the "License");
+:: you may not use this file except in compliance with the License.
+:: You may obtain a copy of the License at
+::
+:: http://www.apache.org/licenses/LICENSE-2.0
+::
+:: Unless required by applicable law or agreed to in writing, software
+:: distributed under the License is distributed on an "AS IS" BASIS,
+:: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+:: See the License for the specific language governing permissions and
+:: limitations under the License.
+
+@echo off
+setlocal enableextensions
+
+call "%~dp0\packman" init
+set "PYTHONPATH=%PM_MODULE_DIR%;%PYTHONPATH%"
+
+if not defined PYTHONNOUSERSITE (
+ set PYTHONNOUSERSITE=1
+)
+
+REM For performance, default to unbuffered; however, allow overriding via
+REM PYTHONUNBUFFERED=0 since PYTHONUNBUFFERED on windows can truncate output
+REM when printing long strings
+if not defined PYTHONUNBUFFERED (
+ set PYTHONUNBUFFERED=1
+)
+
+"%PM_PYTHON%" %* \ No newline at end of file
diff --git a/buildtools/packman/python.sh b/buildtools/packman/python.sh
new file mode 100644
index 0000000..74328bf
--- /dev/null
+++ b/buildtools/packman/python.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+
+# Copyright 2019-2020 NVIDIA CORPORATION
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+
+# http://www.apache.org/licenses/LICENSE-2.0
+
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+set -e
+
+PACKMAN_CMD="$(dirname "${BASH_SOURCE}")/packman"
+if [ ! -f "$PACKMAN_CMD" ]; then
+ PACKMAN_CMD="${PACKMAN_CMD}.sh"
+fi
+source "$PACKMAN_CMD" init
+export PYTHONPATH="${PM_MODULE_DIR}:${PYTHONPATH}"
+
+if [ -z "${PYTHONNOUSERSITE:-}" ]; then
+ export PYTHONNOUSERSITE=1
+fi
+
+# For performance, default to unbuffered; however, allow overriding via
+# PYTHONUNBUFFERED=0 since PYTHONUNBUFFERED on windows can truncate output
+# when printing long strings
+if [ -z "${PYTHONUNBUFFERED:-}" ]; then
+ export PYTHONUNBUFFERED=1
+fi
+
+# workaround for our python not shipping with certs
+if [[ -z ${SSL_CERT_DIR:-} ]]; then
+ export SSL_CERT_DIR=/etc/ssl/certs/
+fi
+
+"${PM_PYTHON}" "$@"
diff --git a/buildtools/packman5/config.packman.xml b/buildtools/packman5/config.packman.xml
deleted file mode 100755
index a3b89aa..0000000
--- a/buildtools/packman5/config.packman.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<config remotes="cloudfront">
- <remote name="cloudfront" packageLocation="d4i3qtqj3r0z5.cloudfront.net/${name}@${version}" type="https" />
-</config> \ No newline at end of file
diff --git a/buildtools/packman5/packman b/buildtools/packman5/packman
deleted file mode 100755
index a2fb94f..0000000
--- a/buildtools/packman5/packman
+++ /dev/null
@@ -1,114 +0,0 @@
-#!/bin/bash
-
-PM_PACKMAN_VERSION=5.7.2
-
-# Specify where packman command exists
-export PM_INSTALL_PATH=$(dirname ${BASH_SOURCE})
-
-add_packages_root_to_file()
-{
- FILE_PATH=$1
- if [ -f "$FILE_PATH" ]; then
- if ! grep -Fq "PM_PACKAGES_ROOT" $FILE_PATH ; then
- echo "Adjusting $FILE_PATH"
- echo -e "export PM_PACKAGES_ROOT=\$HOME/packman-repo\n" >> $FILE_PATH
- fi
- fi
-}
-
-# The packages root may already be configured by the user
-if [ -z "$PM_PACKAGES_ROOT" ]; then
- # Set variable permanently using .profile for this user (if exists)
- add_packages_root_to_file ~/.profile
- add_packages_root_to_file ~/.bashrc
- # Set variable temporarily in this process so that the following execution will work
- export PM_PACKAGES_ROOT="${HOME}/packman-repo"
-fi
-
-# Ensure the packages root path exists:
-if [ ! -d "$PM_PACKAGES_ROOT" ]; then
- echo "Creating packman packages repository at $PM_PACKAGES_ROOT"
- mkdir -p "$PM_PACKAGES_ROOT"
-fi
-
-# The packman module may be externally configured
-if [ -z "$PM_MODULE_DIR_EXT" ]; then
- PM_MODULE_DIR="$PM_PACKAGES_ROOT/packman-common/$PM_PACKMAN_VERSION"
-else
- PM_MODULE_DIR="$PM_MODULE_DIR_EXT"
-fi
-export PM_MODULE="$PM_MODULE_DIR/packman.py"
-
-fetch_file_from_s3()
-{
- SOURCE=$1
- SOURCE_URL=http://packman-bootstrap.s3.amazonaws.com/$SOURCE
- TARGET=$2
- echo "Fetching $SOURCE from S3 ..."
- if command -v wget >/dev/null 2>&1; then
- wget --quiet -O$TARGET $SOURCE_URL
- else
- curl -o $TARGET $SOURCE_URL -s -S
- fi
-}
-
-# Ensure the packman package exists:
-if [ ! -f "$PM_MODULE" ]; then
- PM_MODULE_PACKAGE="packman-common@$PM_PACKMAN_VERSION.zip"
- TARGET="/tmp/$PM_MODULE_PACKAGE"
- # We always fetch packman from S3:
- fetch_file_from_s3 $PM_MODULE_PACKAGE $TARGET
- if [ "$?" -eq "0" ]; then
- echo "Unpacking ..."
- mkdir -p "$PM_MODULE_DIR"
- unzip -q $TARGET -d "$PM_MODULE_DIR"
- rm $TARGET
- else
- echo "Failure while fetching packman module from S3!"
- exit 1
- fi
-fi
-
-# For now assume python is installed on the box and we just need to find it
-if command -v python2.7 >/dev/null 2>&1; then
- export PM_PYTHON=python2.7
-elif command -v python2 >/dev/null 2>&1; then
- export PM_PYTHON=python2
-else
- export PM_PYTHON=python
-fi
-
-# Ensure 7za package exists:
-PM_7za_VERSION=16.02.4
-export PM_7za_PATH="$PM_PACKAGES_ROOT/7za/$PM_7za_VERSION"
-if [ ! -d "$PM_7za_PATH" ]; then
- export PM_7za_PATH="$PM_PACKAGES_ROOT/chk/7za/$PM_7za_VERSION"
- if [ ! -d "$PM_7za_PATH" ]; then
- $PM_PYTHON -s -u -E "$PM_MODULE" pull "$PM_MODULE_DIR/deps.packman.xml"
- if [ "$?" -ne 0 ]; then
- echo "Failure while installing required 7za package"
- exit 1
- fi
- fi
-fi
-
-# Generate temporary file name for environment variables:
-PM_VAR_PATH=`mktemp -u -t tmp.$$.pmvars.XXXXXX`
-
-$PM_PYTHON -s -u -E "$PM_MODULE" "$@" --var-path="$PM_VAR_PATH"
-exit_code=$?
-# Export the variables if the file was used and remove the file:
-if [ -f "$PM_VAR_PATH" ]; then
- while read -r line
- do
- if [ ${#line} -gt 0 ]; then
- export "$line"
- fi
- done < "$PM_VAR_PATH"
- rm -f "$PM_VAR_PATH"
-fi
-
-# Return the exit code from python
-if [ "$exit_code" != 0 ]; then
- exit "$exit_code"
-fi
diff --git a/buildtools/packman5/packman.cmd b/buildtools/packman5/packman.cmd
deleted file mode 100755
index b06f6dc..0000000
--- a/buildtools/packman5/packman.cmd
+++ /dev/null
@@ -1,40 +0,0 @@
-:: Reset errorlevel status so we are not inheriting this state from the calling process:
-@call :RESET_ERROR
-:: You can remove the call below if you do your own manual configuration of the dev machines
-@call "%~dp0\win-bootstrap\configure.bat"
-@if errorlevel 1 exit /b 1
-:: Everything below is mandatory
-@if not defined PM_PYTHON goto :PYTHON_ENV_ERROR
-@if not defined PM_MODULE goto :MODULE_ENV_ERROR
-
-:: Generate temporary path for variable file
-@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile ^
--File "%~dp0win-bootstrap\generate_temp_file_name.ps1"') do @set PM_VAR_PATH=%%a
-
-@"%PM_PYTHON%" -s -u -E "%PM_MODULE%" %* --var-path="%PM_VAR_PATH%"
-@if errorlevel 1 goto :eof
-
-:: Marshall environment variables into the current environment if they have been generated and remove temporary file
-@if exist "%PM_VAR_PATH%" (
- @for /F "usebackq tokens=*" %%A in ("%PM_VAR_PATH%") do @set "%%A"
- @if errorlevel 1 goto :VAR_ERROR
- @del /F "%PM_VAR_PATH%"
-)
-@set PM_VAR_PATH=
-@goto :eof
-
-:: Subroutines below
-:PYTHON_ENV_ERROR
-@echo User environment variable PM_PYTHON is not set! Please configure machine for packman or call configure.bat.
-@exit /b 1
-
-:MODULE_ENV_ERROR
-@echo User environment variable PM_MODULE is not set! Please configure machine for packman or call configure.bat.
-@exit /b 1
-
-:VAR_ERROR
-@echo Error while processing and setting environment variables!
-@exit /b 1
-
-:RESET_ERROR
-@exit /b 0 \ No newline at end of file
diff --git a/buildtools/packman5/win-bootstrap/configure.bat b/buildtools/packman5/win-bootstrap/configure.bat
deleted file mode 100755
index 223a839..0000000
--- a/buildtools/packman5/win-bootstrap/configure.bat
+++ /dev/null
@@ -1,146 +0,0 @@
-@set PM_PACKMAN_VERSION=5.7.2
-
-:: Specify where packman command is rooted
-@set PM_INSTALL_PATH=%~dp0..
-
-:: The external root may already be configured and we should do minimal work in that case
-@if defined PM_PACKAGES_ROOT goto ENSURE_DIR
-
-:: If the folder isn't set we assume that the best place for it is on the drive that we are currently
-:: running from
-@set PM_DRIVE=%CD:~0,2%
-
-@set PM_PACKAGES_ROOT=%PM_DRIVE%\packman-repo
-
-:: We use *setx* here so that the variable is persisted in the user environment
-@echo Setting user environment variable PM_PACKAGES_ROOT to %PM_PACKAGES_ROOT%
-@setx PM_PACKAGES_ROOT %PM_PACKAGES_ROOT%
-@if errorlevel 1 goto ERROR
-
-:: The above doesn't work properly from a build step in VisualStudio because a separate process is
-:: spawned for it so it will be lost for subsequent compilation steps - VisualStudio must
-:: be launched from a new process. We catch this odd-ball case here:
-@if defined PM_DISABLE_VS_WARNING goto ENSURE_DIR
-@if not defined VSLANG goto ENSURE_DIR
-@echo The above is a once-per-computer operation. Unfortunately VisualStudio cannot pick up environment change
-@echo unless *VisualStudio is RELAUNCHED*.
-@echo If you are launching VisualStudio from command line or command line utility make sure
-@echo you have a fresh launch environment (relaunch the command line or utility).
-@echo If you are using 'linkPath' and referring to packages via local folder links you can safely ignore this warning.
-@echo You can disable this warning by setting the environment variable PM_DISABLE_VS_WARNING.
-@echo.
-
-:: Check for the directory that we need. Note that mkdir will create any directories
-:: that may be needed in the path
-:ENSURE_DIR
-@if not exist "%PM_PACKAGES_ROOT%" (
- @echo Creating directory %PM_PACKAGES_ROOT%
- @mkdir "%PM_PACKAGES_ROOT%"
- @if errorlevel 1 goto ERROR_MKDIR_PACKAGES_ROOT
-)
-
-:: The Python interpreter may already be externally configured
-@if defined PM_PYTHON_EXT (
- @set PM_PYTHON=%PM_PYTHON_EXT%
- @goto PACKMAN
-)
-
-@set PM_PYTHON_VERSION=2.7.14-windows-x86_32
-@set PM_PYTHON_BASE_DIR=%PM_PACKAGES_ROOT%\python
-@set PM_PYTHON_DIR=%PM_PYTHON_BASE_DIR%\%PM_PYTHON_VERSION%
-@set PM_PYTHON=%PM_PYTHON_DIR%\python.exe
-
-@if exist "%PM_PYTHON%" goto PACKMAN
-@if not exist "%PM_PYTHON_BASE_DIR%" call :CREATE_PYTHON_BASE_DIR
-
-@set PM_PYTHON_PACKAGE=python@%PM_PYTHON_VERSION%.cab
-@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
-@set TARGET=%TEMP_FILE_NAME%.zip
-@call "%~dp0fetch_file_from_s3.cmd" %PM_PYTHON_PACKAGE% "%TARGET%"
-@if errorlevel 1 goto ERROR
-
-@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_folder.ps1" -parentPath "%PM_PYTHON_BASE_DIR%"') do @set TEMP_FOLDER_NAME=%%a
-@echo Unpacking Python interpreter ...
-@expand -F:* "%TARGET%" "%TEMP_FOLDER_NAME%" 1> nul
-@del "%TARGET%"
-:: Failure during extraction to temp folder name, need to clean up and abort
-@if errorlevel 1 (
- @call :CLEAN_UP_TEMP_FOLDER
- @goto ERROR
-)
-
-:: If python has now been installed by a concurrent process we need to clean up and then continue
-@if exist "%PM_PYTHON%" (
- @call :CLEAN_UP_TEMP_FOLDER
- @goto PACKMAN
-) else (
- @if exist "%PM_PYTHON_DIR%" ( @rd /s /q "%PM_PYTHON_DIR%" > nul )
-)
-
-:: Perform atomic rename
-@rename "%TEMP_FOLDER_NAME%" "%PM_PYTHON_VERSION%" 1> nul
-:: Failure during move, need to clean up and abort
-@if errorlevel 1 (
- @call :CLEAN_UP_TEMP_FOLDER
- @goto ERROR
-)
-
-:PACKMAN
-:: The packman module may already be externally configured
-@if defined PM_MODULE_DIR_EXT (
- @set PM_MODULE_DIR=%PM_MODULE_DIR_EXT%
-) else (
- @set PM_MODULE_DIR=%PM_PACKAGES_ROOT%\packman-common\%PM_PACKMAN_VERSION%
-)
-
-@set PM_MODULE=%PM_MODULE_DIR%\packman.py
-
-@if exist "%PM_MODULE%" goto ENSURE_7ZA
-
-@set PM_MODULE_PACKAGE=packman-common@%PM_PACKMAN_VERSION%.zip
-@for /f "delims=" %%a in ('powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0\generate_temp_file_name.ps1"') do @set TEMP_FILE_NAME=%%a
-@set TARGET=%TEMP_FILE_NAME%
-@call "%~dp0fetch_file_from_s3.cmd" %PM_MODULE_PACKAGE% "%TARGET%"
-@if errorlevel 1 goto ERROR
-
-@echo Unpacking ...
-@"%PM_PYTHON%" -s -u -E "%~dp0\install_package.py" "%TARGET%" "%PM_MODULE_DIR%"
-@if errorlevel 1 goto ERROR
-
-@del "%TARGET%"
-
-:ENSURE_7ZA
-@set PM_7Za_VERSION=16.02.4
-@set PM_7Za_PATH=%PM_PACKAGES_ROOT%\7za\%PM_7ZA_VERSION%
-@if exist "%PM_7Za_PATH%" goto END
-@set PM_7Za_PATH=%PM_PACKAGES_ROOT%\chk\7za\%PM_7ZA_VERSION%
-@if exist "%PM_7Za_PATH%" goto END
-
-@"%PM_PYTHON%" -s -u -E "%PM_MODULE%" pull "%PM_MODULE_DIR%\deps.packman.xml"
-@if errorlevel 1 goto ERROR
-
-@goto END
-
-:ERROR_MKDIR_PACKAGES_ROOT
-@echo Failed to automatically create packman packages repo at %PM_PACKAGES_ROOT%.
-@echo Please set a location explicitly that packman has permission to write to, by issuing:
-@echo.
-@echo setx PM_PACKAGES_ROOT {path-you-choose-for-storing-packman-packages-locally}
-@echo.
-@echo Then launch a new command console for the changes to take effect and run packman command again.
-@exit /B 1
-
-:ERROR
-@echo !!! Failure while configuring local machine :( !!!
-@exit /B 1
-
-:CLEAN_UP_TEMP_FOLDER
-@rd /S /Q "%TEMP_FOLDER_NAME%"
-@exit /B
-
-:CREATE_PYTHON_BASE_DIR
-:: We ignore errors and clean error state - if two processes create the directory one will fail which is fine
-@md "%PM_PYTHON_BASE_DIR%" > nul 2>&1
-@exit /B 0
-
-:END
diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd
deleted file mode 100755
index 4e31293..0000000
--- a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.cmd
+++ /dev/null
@@ -1,22 +0,0 @@
-:: You need to specify <package-name> <target-path> as input to this command
-@setlocal
-@set PACKAGE_NAME=%1
-@set TARGET_PATH=%2
-
-@echo Fetching %PACKAGE_NAME% from packman-bootstrap over HTTP ...
-
-@powershell -ExecutionPolicy ByPass -NoLogo -NoProfile -File "%~dp0fetch_file_from_s3.ps1" -sourceName %PACKAGE_NAME% ^
- -output %TARGET_PATH%
-:: A bug in powershell prevents the errorlevel code from being set when using the -File execution option
-:: We must therefore do our own failure analysis, basically make sure the file exists and is larger than 0 bytes:
-@if not exist %TARGET_PATH% goto ERROR_DOWNLOAD_FAILED
-@if %~z2==0 goto ERROR_DOWNLOAD_FAILED
-
-@endlocal
-@exit /b 0
-
-:ERROR_DOWNLOAD_FAILED
-@echo Failed to download file from S3
-@echo Most likely because endpoint cannot be reached or file %PACKAGE_NAME% doesn't exist
-@endlocal
-@exit /b 1 \ No newline at end of file
diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1 b/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1
deleted file mode 100755
index 96db7f2..0000000
--- a/buildtools/packman5/win-bootstrap/fetch_file_from_s3.ps1
+++ /dev/null
@@ -1,60 +0,0 @@
-param(
-[Parameter(Mandatory=$true)][string]$sourceName=$null,
-[string]$output="out.exe"
-)
-$source = "http://packman-bootstrap.s3.amazonaws.com/" + $sourceName
-$filename = $output
-
-$triesLeft = 3
-
-do
-{
- $triesLeft -= 1
- $req = [System.Net.httpwebrequest]::Create($source)
- $req.cookiecontainer = New-Object System.net.CookieContainer
-
- try
- {
- Write-Host "Connecting to S3 ..."
- $res = $req.GetResponse()
- if($res.StatusCode -eq "OK") {
- Write-Host "Downloading ..."
- [int]$goal = $res.ContentLength
- $reader = $res.GetResponseStream()
- $writer = new-object System.IO.FileStream $fileName, "Create"
- [byte[]]$buffer = new-object byte[] 4096
- [int]$total = [int]$count = 0
- do
- {
- $count = $reader.Read($buffer, 0, $buffer.Length);
- $writer.Write($buffer, 0, $count);
- $total += $count
- if($goal -gt 0) {
- Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
- } else {
- Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
- }
- } while ($count -gt 0)
-
- $triesLeft = 0
- }
- }
- catch
- {
- Write-Host "Error connecting to S3!"
- Write-Host $_.Exception|format-list -force
- }
- finally
- {
- if ($reader)
- {
- $reader.Close()
- }
- if ($writer)
- {
- $writer.Flush()
- $writer.Close()
- }
- }
-} while ($triesLeft -gt 0)
-
diff --git a/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1 b/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1
deleted file mode 100755
index b9cb23c..0000000
--- a/buildtools/packman5/win-bootstrap/fetch_file_from_url.ps1
+++ /dev/null
@@ -1,37 +0,0 @@
-param(
-[Parameter(Mandatory=$true)][string]$sourceUrl=$null,
-[Parameter(Mandatory=$true)][string]$output=$null
-)
-$source = $sourceUrl
-$filename = $output
-
-$req = [System.Net.httpwebrequest]::Create($source)
-$req.cookiecontainer = New-Object System.net.CookieContainer
-
-Write-Host "Connecting to $source ..."
-$res = $req.GetResponse()
-
-if($res.StatusCode -eq "OK") {
- Write-Host "Downloading ..."
- [int]$goal = $res.ContentLength
- $reader = $res.GetResponseStream()
- $writer = new-object System.IO.FileStream $fileName, "Create"
- [byte[]]$buffer = new-object byte[] 4096
- [int]$total = [int]$count = 0
- do
- {
- $count = $reader.Read($buffer, 0, $buffer.Length);
- $writer.Write($buffer, 0, $count);
- $total += $count
- if($goal -gt 0) {
- Write-Progress "Downloading $url" "Saving $total of $goal" -id 0 -percentComplete (($total/$goal)*100)
- } else {
- Write-Progress "Downloading $url" "Saving $total bytes..." -id 0
- }
- } while ($count -gt 0)
-
- $reader.Close()
- $writer.Flush()
- $writer.Close()
-}
-
diff --git a/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1 b/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1
deleted file mode 100755
index a8c9c1b..0000000
--- a/buildtools/packman5/win-bootstrap/generate_temp_file_name.ps1
+++ /dev/null
@@ -1,2 +0,0 @@
-$out = [System.IO.Path]::GetTempFileName()
-Write-Host $out \ No newline at end of file
diff --git a/buildtools/packman5/win-bootstrap/generate_temp_folder.ps1 b/buildtools/packman5/win-bootstrap/generate_temp_folder.ps1
deleted file mode 100644
index b24a654..0000000
--- a/buildtools/packman5/win-bootstrap/generate_temp_folder.ps1
+++ /dev/null
@@ -1,7 +0,0 @@
-param(
-[Parameter(Mandatory=$true)][string]$parentPath=$null
-)
-[string] $name = [System.Guid]::NewGuid()
-$out = Join-Path $parentPath $name
-New-Item -ItemType Directory -Path ($out) | Out-Null
-Write-Host $out
diff --git a/buildtools/packman5/win-bootstrap/install_package.py b/buildtools/packman5/win-bootstrap/install_package.py
deleted file mode 100755
index 3aa294e..0000000
--- a/buildtools/packman5/win-bootstrap/install_package.py
+++ /dev/null
@@ -1,39 +0,0 @@
-import logging
-import zipfile
-import tempfile
-import sys
-import shutil
-
-__author__ = 'hfannar'
-logging.basicConfig(level=logging.WARNING, format="%(message)s")
-logger = logging.getLogger('install_package')
-
-
-class TemporaryDirectory:
- def __init__(self):
- self.path = None
-
- def __enter__(self):
- self.path = tempfile.mkdtemp()
- return self.path
-
- def __exit__(self, type, value, traceback ):
- # Remove temporary data created
- shutil.rmtree(self.path)
-
-
-def install_package(package_src_path, package_dst_path):
- with zipfile.ZipFile(package_src_path, allowZip64=True) as zip_file, TemporaryDirectory() as temp_dir:
- zip_file.extractall(temp_dir)
- # Recursively copy (temp_dir will be automatically cleaned up on exit)
- try:
- # Recursive copy is needed because both package name and version folder could be missing in
- # target directory:
- shutil.copytree(temp_dir, package_dst_path)
- except OSError, exc:
- logger.warning("Directory %s already present, packaged installation aborted" % package_dst_path)
- else:
- logger.info("Package successfully installed to %s" % package_dst_path)
-
-
-install_package(sys.argv[1], sys.argv[2]) \ No newline at end of file
diff --git a/docs/_compile/doxygen.bat b/docs/_compile/doxygen.bat
index d74cf87..f5f19ba 100755
--- a/docs/_compile/doxygen.bat
+++ b/docs/_compile/doxygen.bat
@@ -20,7 +20,7 @@ if exist ..\"%NAME%"_docs (
:: Run packman to ensure doxygen is there:
set DOXYGEN_VERSION=1.5.8-gameworks-win
-call "%BLAST_ROOT%\buildtools\packman5\packman.cmd" install doxygen %DOXYGEN_VERSION%
+call "%BLAST_ROOT%\buildtools\packman\packman.cmd" install doxygen %DOXYGEN_VERSION%
if errorlevel 1 (
echo ***SCRIPTERROR: packman failed to get dependencies
goto doxygen_failed
diff --git a/docs/_compile/doxygen.sh b/docs/_compile/doxygen.sh
index 340e1e6..987ded8 100755
--- a/docs/_compile/doxygen.sh
+++ b/docs/_compile/doxygen.sh
@@ -21,7 +21,7 @@ fi
DOXYGEN_VERSION=1.8.13-linux-x86_64
echo "Using packman to get doxygen: $DOXYGEN_VERSION"
-source $(dirname "$0")/../../buildtools/packman5/packman install doxygen $DOXYGEN_VERSION
+source $(dirname "$0")/../../buildtools/packman/packman install doxygen $DOXYGEN_VERSION
DOXYGEN=$PM_doxygen_PATH/bin/doxygen
diff --git a/docs/release_notes.txt b/docs/release_notes.txt
index 355eb3c..462b0e4 100755
--- a/docs/release_notes.txt
+++ b/docs/release_notes.txt
@@ -3,6 +3,15 @@
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+Blast(tm) SDK 1.1.10 (20-Dec-2024)
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+
+Changes
+-------
+* Updated Packman version for external packages. Fixes download_sample_resources.bat usage.
+
+
+//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Blast(tm) SDK 1.1.9 (22-Mar-2024)
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/download_sample_resources.bat b/download_sample_resources.bat
index d733c02..d15bd9d 100755
--- a/download_sample_resources.bat
+++ b/download_sample_resources.bat
@@ -3,7 +3,7 @@
:: Run packman to pull resources
@echo Running packman to pull resources...
-@call "%~dp0buildtools\packman5\packman.cmd" pull "%~dp0\samples\resources\configs\resources.xml"
+@call "%~dp0buildtools\packman\packman.cmd" pull "%~dp0\samples\resources\configs\resources.xml"
@if %ERRORLEVEL% neq 0 (
@exit /b %errorlevel%
) else (
diff --git a/generate_projects_linux.sh b/generate_projects_linux.sh
index ebbc58d..84bc743 100755
--- a/generate_projects_linux.sh
+++ b/generate_projects_linux.sh
@@ -7,7 +7,7 @@ echo $BLAST_ROOT_DIR
# Run packman to ensure dependencies are present and run cmake generation script last
echo "Getting build platform dependencies for Linux ..."
-source $BLAST_ROOT_DIR"/buildtools/packman5/packman" pull $BLAST_ROOT_DIR"/buildtools/build_platform_deps.xml" --platform linux
+source $BLAST_ROOT_DIR"/buildtools/packman/packman" pull $BLAST_ROOT_DIR"/buildtools/build_platform_deps.xml" --platform linux
echo "Getting target platform dependencies for Linux ..."
-source $BLAST_ROOT_DIR"/buildtools/packman5/packman" pull $BLAST_ROOT_DIR"/target_platform_deps.xml" --platform linux --postscript $BLAST_ROOT_DIR"/buildtools/cmake_projects_linux.sh"
+source $BLAST_ROOT_DIR"/buildtools/packman/packman" pull $BLAST_ROOT_DIR"/target_platform_deps.xml" --platform linux --postscript $BLAST_ROOT_DIR"/buildtools/cmake_projects_linux.sh"
diff --git a/generate_projects_linux_ue4_crosscompile.bat b/generate_projects_linux_ue4_crosscompile.bat
index 9661bc0..8d1e7d5 100755
--- a/generate_projects_linux_ue4_crosscompile.bat
+++ b/generate_projects_linux_ue4_crosscompile.bat
@@ -14,7 +14,7 @@
)
::Need linux libs, but windows tools, run us again to get the path
-@call "%~dp0buildtools\packman5\packman.cmd" pull "%~dp0target_platform_deps.xml" --platform linux --postscript "%~dp0buildtools\cmake_projects_linux_ue4_crosscompile.bat"
+@call "%~dp0buildtools\packman\packman.cmd" pull "%~dp0target_platform_deps.xml" --platform linux --postscript "%~dp0buildtools\cmake_projects_linux_ue4_crosscompile.bat"
@if %ERRORLEVEL% neq 0 (
@exit /b %errorlevel%
) else (
diff --git a/generate_projects_vc15win64.bat b/generate_projects_vc15win64.bat
index 1e32980..f10d951 100755
--- a/generate_projects_vc15win64.bat
+++ b/generate_projects_vc15win64.bat
@@ -11,7 +11,7 @@
@if %ERRORLEVEL% neq 0 exit /b %errorlevel%
@echo Getting target platform dependencies for win.x86_64.vc150 ...
-@call "%~dp0buildtools\packman5\packman.cmd" pull "%~dp0target_platform_deps.xml" --platform win.x86_64.vc150 --postscript "%~dp0buildtools\cmake_projects_vc15win64.bat"
+@call "%~dp0buildtools\packman\packman.cmd" pull "%~dp0target_platform_deps.xml" --platform win.x86_64.vc150 --postscript "%~dp0buildtools\cmake_projects_vc15win64.bat"
@if %ERRORLEVEL% neq 0 (
@exit /b %errorlevel%
) else (