#!/usr/bin/env bash

#===--- swift-stdlib-tool - stand-in for the real swift-stdlib-tool --------===#
#
## This source file is part of the Swift.org open source project
##
## Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
## Licensed under Apache License v2.0 with Runtime Library Exception
##
## See https://swift.org/LICENSE.txt for license information
## See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
#
#===------------------------------------------------------------------------===#

# swift-stdlib-tool substitute for toolchains.
#
# This stand-in for swift-stdlib-tool runs the real swift-stdlib-tool 
# from the XcodeDefault toolchain in $DEVELOPER_DIR.

self_path=$0

tool="$DEVELOPER_DIR/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-stdlib-tool"
if [ ! -f "$tool" -o ! -x "$tool" ]; then
    echo "$self_path: error: couldn't find swift-stdlib-tool at $tool"
    exit 1
fi

# swift-stdlib-tool sometimes looks for stdlib files relative to itself.
# Perform that lookup here and pass the results to the real swift-stdlib-tool.

argv=("$@")

# Look for an existing --source-libraries argument.
# Look for a --platform argument.
have_source_libraries=NO
platform=""
set -- "$@"
while [[ $# -gt 0 ]]; do
    case "$1" in
        --source-libraries)
            shift
            if [[ $# -gt 0 ]]; then
                have_source_libraries=YES
            fi
            ;;
        --platform)
            shift
            if [[ $# -gt 0 ]]; then
                platform="$1"
            fi
            ;;
    esac
    shift
done


if [[ "$have_source_libraries" = YES ]]; then
    # --source-libraries was already passed. Nothing to do.
    true
elif [[ "$platform" = "" ]]; then
    # platform is unset. Can't continue.
    echo "$self_path: error: neither --platform nor --source-libraries is set."
    exit 1
else
    # Construct a new --source-libraries argument.
    bindir=$(dirname "$self_path")
    usrdir=$(dirname "$bindir")
    source_libraries="$usrdir/lib/swift/$platform"
    if [ ! -d "$source_libraries" -o ! -x "$source_libraries" ]; then
        echo "$self_path: error: platform path inaccessible: $source_libraries"
        exit 1
    fi
    argv+=("--source-libraries")
    argv+=("$source_libraries")
fi

# Log and run the tool with the new arguments.
echo "$tool" "${argv[@]}"
exec "$tool" "${argv[@]}"
