| name | update-tpn |
| description | Audit and update the THIRD-PARTY-NOTICES.TXT file. Use when the user asks to "update TPNs", "audit third-party notices", "check third-party licenses", or after adding/removing a dependency. Scans submodules, vendored code, NuGet packages, and native libraries to ensure the TPN file is complete and accurate. |
Update Third-Party Notices
Audit and regenerate the THIRD-PARTY-NOTICES.TXT file at the repo root.
This file is checked in and shipped as-is in the product NuGet packages.
There is no code generation step — this skill replaces the old xaprepare TPN infrastructure.
File Format
The file uses the MicrosoftOSS header format:
xamarin-android
THIRD - PARTY SOFTWARE NOTICES AND INFORMATION
Do Not Translate or Localize
This project incorporates components from the projects listed below.
The original copyright notices and the licenses under which Microsoft
received such components are set forth below.
Microsoft reserves all rights not expressly granted herein, whether by
implication, estoppel or otherwise.
1. name (url)
2. name (url)
...
%% name NOTICES AND INFORMATION BEGIN HERE
==========================================
<license text>
==========================================
END OF name NOTICES AND INFORMATION
Entries are sorted case-insensitively by name. Each entry has a numbered TOC line and a license section.
Audit Workflow
Step 1 — Inventory all dependencies
Scan these sources to build a complete list of third-party dependencies:
Git Submodules
Read .gitmodules for all submodules. Current submodules and their license files:
Vendored Source (src-ThirdParty/)
List contents of src-ThirdParty/ directory. Current vendored code and license sources:
Note: Mono.Security.Cryptography/, System.Diagnostics.CodeAnalysis/, System.Runtime.CompilerServices/, and dotnet/ are Microsoft-owned and do not need TPN entries.
NuGet Packages
Search .csproj files for <PackageReference> elements. Current third-party NuGet packages needing TPNs:
Note: Microsoft-owned NuGet packages (Microsoft., System.) do not need TPN entries.
Vendored Linker Code
The src/Xamarin.Android.Build.Tasks/Linker/External/ directory contains vendored code from the Mono linker:
Native Libraries (from CMakeLists.txt)
Check src/native/ CMakeLists.txt files for references to external native code. The submodules above (lz4, xxHash, libunwind, robin-map) are compiled into native libraries.
Android SDK Tools
These are downloaded and shipped with the SDK:
libzip (via LibZipSharp NuGet)
LibZipSharp bundles libzip internally:
| Source | Name in TPN | License Location |
|---|
| libzip (in LibZipSharp NuGet) | nih-at/libzip | LibZipSharp NuGet Licences/libzip/LICENSE or https://github.com/nih-at/libzip/ (BSD-3-Clause) |
Step 2 — Cross-reference
Compare the inventory against the current entries in THIRD-PARTY-NOTICES.TXT:
- Missing entries: Dependencies found in Step 1 but not in the TPN file
- Stale entries: TPN entries for dependencies no longer used
- Incorrect info: Wrong URLs, outdated license text
Step 3 — Update the file
For each change:
- Add/remove the TOC line (maintain sorted order and renumber)
- Add/remove the license section (maintain sorted order)
- For new entries, fetch the license text from the source URL or LICENSE file
Step 4 — Verify
Run grep -cP "^\d+\." THIRD-PARTY-NOTICES.TXT (or Select-String "^\d+\." THIRD-PARTY-NOTICES.TXT on Windows) to confirm the entry count and ordering.