# Copyright (C) 2020 FireEye, Inc. All Rights Reserved.

from PyInstaller.utils.hooks import copy_metadata

# in order for viv-utils to use pkg_resources to fetch
# the installed version of vivisect,
# we need to instruct pyinstaller to embed this metadata.
#
# so we set the pyinstaller.spec/hookspath to reference
#  the directory with this hook.
#
# this hook runs at analysis time and updates the embedded metadata.
#
# ref: https://github.com/pyinstaller/pyinstaller/issues/1713#issuecomment-162682084
datas = copy_metadata("vivisect")

excludedimports = [
    # viv gui requires these heavy libraries,
    # but viv as a library doesn't.
    # they shouldn't be installed in our configuration,
    # but we'll ensure they don't slip in here (such as on developers' systems).
    "PyQt5",
    "qt5",
    "pyqtwebengine",
    # the above are imported by these viv modules.
    # so really, we'd want to exclude these submodules of viv.
    # but i dont think this works.
    "vqt",
    "vdb.qt",
    "envi.qt",
    # unused by capa
    "pyasn1",
]

hiddenimports = [
    # vivisect does manual/runtime importing of its modules,
    # so declare the things that could be imported here.
    "vivisect",
    "vivisect.analysis",
    "vivisect.analysis.amd64",
    "vivisect.analysis.amd64",
    "vivisect.analysis.amd64.emulation",
    "vivisect.analysis.amd64.golang",
    "vivisect.analysis.crypto",
    "vivisect.analysis.crypto",
    "vivisect.analysis.crypto.constants",
    "vivisect.analysis.elf",
    "vivisect.analysis.elf",
    "vivisect.analysis.elf.elfplt",
    "vivisect.analysis.elf.libc_start_main",
    "vivisect.analysis.generic",
    "vivisect.analysis.generic",
    "vivisect.analysis.generic.codeblocks",
    "vivisect.analysis.generic.emucode",
    "vivisect.analysis.generic.entrypoints",
    "vivisect.analysis.generic.funcentries",
    "vivisect.analysis.generic.impapi",
    "vivisect.analysis.generic.mkpointers",
    "vivisect.analysis.generic.pointers",
    "vivisect.analysis.generic.pointertables",
    "vivisect.analysis.generic.relocations",
    "vivisect.analysis.generic.strconst",
    "vivisect.analysis.generic.switchcase",
    "vivisect.analysis.generic.thunks",
    "vivisect.analysis.generic.noret",
    "vivisect.analysis.i386",
    "vivisect.analysis.i386",
    "vivisect.analysis.i386.calling",
    "vivisect.analysis.i386.golang",
    "vivisect.analysis.i386.importcalls",
    "vivisect.analysis.i386.instrhook",
    "vivisect.analysis.i386.thunk_bx",
    "vivisect.analysis.ms",
    "vivisect.analysis.ms",
    "vivisect.analysis.ms.hotpatch",
    "vivisect.analysis.ms.localhints",
    "vivisect.analysis.ms.msvc",
    "vivisect.analysis.ms.msvcfunc",
    "vivisect.analysis.ms.vftables",
    "vivisect.analysis.pe",
    "vivisect.impapi.posix.amd64",
    "vivisect.impapi.posix.i386",
    "vivisect.impapi.windows",
    "vivisect.impapi.windows.amd64",
    "vivisect.impapi.windows.i386",
    "vivisect.impapi.winkern.i386",
    "vivisect.impapi.winkern.amd64",
    "vivisect.parsers.blob",
    "vivisect.parsers.elf",
    "vivisect.parsers.ihex",
    "vivisect.parsers.macho",
    "vivisect.parsers.pe",
    "vivisect.storage",
    "vivisect.storage.basicfile",
    "vstruct.constants",
    "vstruct.constants.ntstatus",
    "vstruct.defs",
    "vstruct.defs.arm7",
    "vstruct.defs.bmp",
    "vstruct.defs.dns",
    "vstruct.defs.elf",
    "vstruct.defs.gif",
    "vstruct.defs.ihex",
    "vstruct.defs.inet",
    "vstruct.defs.java",
    "vstruct.defs.kdcom",
    "vstruct.defs.macho",
    "vstruct.defs.macho.const",
    "vstruct.defs.macho.fat",
    "vstruct.defs.macho.loader",
    "vstruct.defs.macho.stabs",
    "vstruct.defs.minidump",
    "vstruct.defs.pcap",
    "vstruct.defs.pe",
    "vstruct.defs.pptp",
    "vstruct.defs.rar",
    "vstruct.defs.swf",
    "vstruct.defs.win32",
    "vstruct.defs.windows",
    "vstruct.defs.windows.win_5_1_i386",
    "vstruct.defs.windows.win_5_1_i386.ntdll",
    "vstruct.defs.windows.win_5_1_i386.ntoskrnl",
    "vstruct.defs.windows.win_5_1_i386.win32k",
    "vstruct.defs.windows.win_5_2_i386",
    "vstruct.defs.windows.win_5_2_i386.ntdll",
    "vstruct.defs.windows.win_5_2_i386.ntoskrnl",
    "vstruct.defs.windows.win_5_2_i386.win32k",
    "vstruct.defs.windows.win_6_1_amd64",
    "vstruct.defs.windows.win_6_1_amd64.ntdll",
    "vstruct.defs.windows.win_6_1_amd64.ntoskrnl",
    "vstruct.defs.windows.win_6_1_amd64.win32k",
    "vstruct.defs.windows.win_6_1_i386",
    "vstruct.defs.windows.win_6_1_i386.ntdll",
    "vstruct.defs.windows.win_6_1_i386.ntoskrnl",
    "vstruct.defs.windows.win_6_1_i386.win32k",
    "vstruct.defs.windows.win_6_1_wow64",
    "vstruct.defs.windows.win_6_1_wow64.ntdll",
    "vstruct.defs.windows.win_6_2_amd64",
    "vstruct.defs.windows.win_6_2_amd64.ntdll",
    "vstruct.defs.windows.win_6_2_amd64.ntoskrnl",
    "vstruct.defs.windows.win_6_2_amd64.win32k",
    "vstruct.defs.windows.win_6_2_i386",
    "vstruct.defs.windows.win_6_2_i386.ntdll",
    "vstruct.defs.windows.win_6_2_i386.ntoskrnl",
    "vstruct.defs.windows.win_6_2_i386.win32k",
    "vstruct.defs.windows.win_6_2_wow64",
    "vstruct.defs.windows.win_6_2_wow64.ntdll",
    "vstruct.defs.windows.win_6_3_amd64",
    "vstruct.defs.windows.win_6_3_amd64.ntdll",
    "vstruct.defs.windows.win_6_3_amd64.ntoskrnl",
    "vstruct.defs.windows.win_6_3_i386",
    "vstruct.defs.windows.win_6_3_i386.ntdll",
    "vstruct.defs.windows.win_6_3_i386.ntoskrnl",
    "vstruct.defs.windows.win_6_3_wow64",
    "vstruct.defs.windows.win_6_3_wow64.ntdll",
]
