#!/usr/bin/python3 -B

import os
import sys
from textwrap import dedent

from config import Signing

(series, source_name, generate_name, source_version, unsigned_name, unsigned_version, abi_version) = sys.argv[1:]

signing = Signing.load("debian/package.config")

with open("debian/control.stub") as tfd, open("debian/control", "w") as cfd:
    for line in tfd:
        line = line.replace("@SRCPKGNAME@", source_name)
        line = line.replace("@SERIES@", series)
        if "@DEPENDS@" in line:
            for flavour, archs in signing.flavour_archs:
                print(' linux-image-unsigned-{}-{} (= {}) [{}],'.format((abi_version), (flavour), (unsigned_version), (" ".join(archs))), file=cfd)
                print(' linux-buildinfo-{}-{} (= {}) [{}],'.format((abi_version), (flavour), (unsigned_version), (" ".join(archs))), file=cfd)
            print(" {} (= {}),".format((generate_name), (source_version)), file=cfd)
        else:
            print(line, end='', file=cfd)

    for flavour, archs in signing.package_flavour_archs("image"):
        print(dedent("""\

            Package: linux-image-{}-{}
            Architecture: {}
            Depends: ${{unsigned:Depends}}
            Recommends: ${{unsigned:Recommends}}
            Suggests: ${{unsigned:Suggests}}
            Conflicts: ${{unsigned:Conflicts}}
            Provides: ${{unsigned:Provides}}
            Built-Using: {} (= {})
            Description: Signed kernel image {}
             A kernel image for {}.  This version of it is signed with
             Canonical's signing key.
            """.format((abi_version), (flavour), (" ".join(archs)), (unsigned_name), (unsigned_version), (flavour), (flavour))).rstrip(), file=cfd)
    for flavour, archs in signing.package_flavour_archs("di"):
        print(dedent("""\

            Package: kernel-signed-image-{}-{}-di
            Package-Type: udeb
            Section: debian-installer
            Priority: extra
            Provides: kernel-signed-image
            Architecture: {}
            Built-Using: {} (= {})
            Description: Signed kernel image {} for the Debian installer
             A kernel image for {}.  This version of it is signed with
             Canonical's UEFI signing key.  It is intended for the Debian installer,
             it does _not_ provide a usable kernel for your full Debian system.
        """.format((abi_version), (flavour), (" ".join(archs)), (unsigned_name), (unsigned_version), (flavour), (flavour))).rstrip(), file=cfd)
    for flavour, archs in signing.package_flavour_archs("hmac"):
        print(dedent("""\

            Package: linux-image-hmac-{}-{}
            Build-Profiles: <!stage1>
            Architecture: {}
            Section: kernel
            Priority: optional
            Depends: ${{misc:Depends}}, ${{shlibs:Depends}}, linux-image-{}-{}
            Suggests: fips-initramfs-generic
            Description: HMAC file for linux kernel image {}-{}
             This package contains the HMAC file for Linux kernel image for version
             {}-{}
            """.format((abi_version), (flavour), (" ".join(archs)), (abi_version), (flavour), (abi_version), (flavour), (abi_version), (flavour))).rstrip(), file=cfd)
    # XXX: all dbgsym packages _must_ be at the end of debian/control else the
    # build will hang forever on the builder.
    for flavour, archs in signing.package_flavour_archs("image"):
        print(dedent("""\

            Package: linux-image-{}-{}-dbgsym
            Section: devel
            Architecture: {}
            Depends: linux-image-unsigned-{}-{}-dbgsym
            Description: Signed kernel image {}
             A link to the debugging symbols for the {} signed kernel.
            """.format((abi_version), (flavour), (" ".join(archs)), (abi_version), (flavour), (flavour), (flavour))).rstrip(), file=cfd)
