#!/usr/bin/env python3

# This script invoked as pkg-config supporting Fuchsia cross compilation for packages built with
# meson (such as libva - see build.sh).

import getopt
import os
import subprocess
import sys

if __name__ == '__main__':
    optlist, args = getopt.gnu_getopt(
        sys.argv[1:], '', ['version', 'modversion', 'cflags', 'libs'])

    if optlist[0][0] == "--version":
        print("0.1")
        exit(0)

    fuchsia_dir = os.getenv("FUCHSIA_DIR", "<no-fuchsia-shared-out-dir>")
    fuchsia_shared_out_dir = os.getenv(
        "FUCHSIA_SHARED_OUT_DIR", "<no-fuchsia-shared-out-dir>")

    for lib in args:
        if lib == "magma":
            if optlist[0][0] == "--modversion":
                print("1.0.0")
            elif optlist[0][0] == "--cflags":
                print(
                    f"-I{fuchsia_dir}/src/graphics/lib/magma/include/magma_abi "
                )
            elif optlist[0][0] == "--libs":
                print(
                    f"{fuchsia_shared_out_dir}/obj/src/graphics/lib/magma/src/libmagma/libmagma_complete.a "
                )
            else:
                print("Unrecognized option")
                exit(1)

        else:
            sys.stderr.write("Unrecognized library: %s" % lib)
            exit(2)

    exit(0)
