#!/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 "
                )
            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)
