| #!/usr/bin/env python3 |
| # Copyright (C) 2026 Apple Inc. All rights reserved. |
| # |
| # Redistribution and use in source and binary forms, with or without |
| # modification, are permitted provided that the following conditions |
| # are met: |
| # 1. Redistributions of source code must retain the above copyright |
| # notice, this list of conditions and the following disclaimer. |
| # 2. Redistributions in binary form must reproduce the above copyright |
| # notice, this list of conditions and the following disclaimer in the |
| # documentation and/or other materials provided with the distribution. |
| # |
| # THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY |
| # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
| # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR |
| # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, |
| # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR |
| # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY |
| # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| """Generate a clang VFS overlay YAML that swaps the SDK's |
| <os/availability.h> and <Availability.h> for WebKit-supplied stubs that |
| defuse availability checks. |
| """ |
| |
| import argparse |
| import json |
| import sys |
| from pathlib import Path |
| |
| ap = argparse.ArgumentParser(description=__doc__) |
| ap.add_argument("--sdk", type=Path, required=True) |
| ap.add_argument("--stubs", type=Path, required=True) |
| ap.add_argument("--out", type=Path, required=True) |
| args = ap.parse_args() |
| |
| HEADERS = ("usr/include/os/availability.h", "usr/include/Availability.h") |
| |
| content = json.dumps({ |
| "version": 0, |
| "case-sensitive": False, |
| "roots": [ |
| {"name": str(args.sdk / rel), |
| "type": "file", |
| "external-contents": str(args.stubs / rel)} |
| for rel in HEADERS |
| ], |
| }, indent=2) + "\n" |
| |
| # Skip the write when content is unchanged to preserve mtime and avoid |
| # spurious downstream rebuilds. Writing directly (rather than temp+rename) |
| # is required for Xcode's user-script sandbox, which only permits writes |
| # to declared outputPaths. |
| if args.out.is_file() and args.out.read_text() == content: |
| sys.exit(0) |
| args.out.write_text(content) |