#-----------------------------------------------------------------------------
# Copyright (c) 2013-2023, PyInstaller Development Team.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#
# SPDX-License-Identifier: Apache-2.0
#-----------------------------------------------------------------------------

# The win32.client.gencache code must be allowed to create the cache in %temp% (user's temp). It is necessary to get the
# gencache code to use a suitable directory other than the default in lib\site-packages\win32com\client\gen_py.
# PyInstaller does not provide this directory structure and the frozen executable could be placed in a non-writable
# directory like 'C:\Program Files. That's the reason for %temp% directory.
#
# http://www.py2exe.org/index.cgi/UsingEnsureDispatch

import atexit
import os
import shutil
import tempfile

# Put gen_py cache in temp directory.
supportdir = tempfile.mkdtemp()
# gen_py has to be put into directory 'gen_py'.
genpydir = os.path.join(supportdir, 'gen_py')

# Create 'gen_py' directory. This directory does not need to contain '__init__.py' file.
try:
    # win32com gencache cannot be put directly to 'supportdir' with any random name. It has to be put in a directory
    # called 'gen_py'. This is the reason why to create this directory in supportdir'.
    os.makedirs(genpydir)
    # Remove temp directory at application exit and ignore any errors.
    atexit.register(shutil.rmtree, supportdir, ignore_errors=True)
except OSError:
    pass

# Override the default path to gen_py cache.
import win32com  # noqa: E402

win32com.__gen_path__ = genpydir

# The attribute __loader__ makes module 'pkg_resources' working but On Windows it breaks pywin32 (win32com) and test
# 'basic/test_pyttsx' will fail. Just removing that attribute for win32com fixes that and gencache is created properly.
if hasattr(win32com, '__loader__'):
    del win32com.__loader__

# Ensure genpydir is in 'gen_py' module paths.
import win32com.gen_py  # noqa: E402

win32com.gen_py.__path__.insert(0, genpydir)
