VYPR
High severityNVD Advisory· Published Jan 14, 2020· Updated Aug 5, 2024

Local Privilege Escalation present only on the Windows version of PyInstaller

CVE-2019-16784

Description

In PyInstaller before version 3.6, only on Windows, a local privilege escalation vulnerability is present in this particular case: If a software using PyInstaller in "onefile" mode is launched by a privileged user (at least more than the current one) which have his "TempPath" resolving to a world writable directory. This is the case for example if the software is launched as a service or as a scheduled task using a system account (TempPath will be C:\Windows\Temp). In order to be exploitable the software has to be (re)started after the attacker launch the exploit program, so for a service launched at startup, a service restart is needed (e.g. after a crash or an upgrade).

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
PyInstallerPyPI
< 3.63.6

Affected products

1

Patches

3
6d4cce1f8eb8

Release 3.6.

https://github.com/pyinstaller/pyinstallerHartmut GoebelJan 9, 2020via osv
300 files changed · +2335 1479
  • COPYING.txt+8 6 modified
    @@ -3,7 +3,7 @@
     ================================
      
     
    -Copyright (c) 2010-2019, PyInstaller Development Team
    +Copyright (c) 2010-2020, PyInstaller Development Team
     Copyright (c) 2005-2009, Giovanni Bajo
     Based on previous work under copyright (c) 2002 McMillan Enterprises, Inc.
     
    @@ -22,7 +22,7 @@ and related files into combinations with other programs, and to distribute
     those combinations without any restriction coming from the use of those
     files. (The General Public License restrictions do apply in other respects;
     for example, they cover modification of the files, and distribution when
    -not linked into a combine executable.)
    +not linked into a combined executable.)
      
      
     Bootloader and Related Files
    @@ -70,12 +70,14 @@ to indicate the copyright and license terms:
     
     
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-20l5, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -90,7 +92,7 @@ https://gnu.org/licenses/gpl-2.0.html
     		       Version 2, June 1991
     
      Copyright (C) 1989, 1991 Free Software Foundation, Inc.
    -                 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
    + 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
      Everyone is permitted to copy and distribute verbatim copies
      of this license document, but changing it is not allowed.
     
    
  • .gitattributes+5 0 modified
    @@ -17,6 +17,11 @@ runw_d	-text
     *.exe	-text
     *.dll	-text
     
    +# misc
    +*.sqlite3 -text
    +*.egg     -text
    +*.zip     -text
    +
     /PyInstaller/utils/_gitrevision.py ident export-subst
     # Tests relay on fixed \n line end
     /tests/unit/test_modulegraph/testdata/test.txt text eol=lf
    
  • .github/CONTRIBUTING.md+1 1 modified
    @@ -1,2 +1,2 @@
     Please refer to the [Development
    -Guide](https://github.com/pyinstaller/pyinstaller/wiki/Development).
    +Guide](https://pyinstaller.readthedocs.io/en/latest/development/).
    
  • .github/FUNDING.yml+3 0 added
    @@ -0,0 +1,3 @@
    +custom: ["http://www.pyinstaller.org/funding.html", "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=VK5QJFDCE8UW6"]
    +patreon: pyinstaller
    +tidelift: "pypi/PyInstaller"
    
  • .github/ISSUE_TEMPLATE/bug_report.md+69 0 added
    @@ -0,0 +1,69 @@
    +---
    +name: Bug report
    +about: Report a bug encountered while freezing you program or runing your frozen program
    +title: ''
    +labels:
    +assignees: ''
    +---
    +
    +<!--
    +Welcome to the PyInstaller issue tracker! Before creating an issue, please heed the following:
    +
    +1. This tracker should only be used to report bugs and request features / enhancements to PyInstaller
    +    - For questions and general support, use the mailing list, see
    +	  <http://www.pyinstaller.org/support.html#mailing-list>
    +2. Use the search function before creating a new issue. Duplicates will be closed and directed to
    +   the original discussion.
    +3. When making a bug report, make sure you provide all required information. The easier it is for
    +   maintainers to reproduce, the faster it'll be fixed.
    +-->
    +
    ++++ ONLY TEXT +++ DO NOT POST IMAGES +++
    +
    +## Description of the issue
    +
    +## Context information (for bug reports)
    +
    +* Output of `pyinstaller --version`: ```(paste here)```
    +* Version of Python: e.g. 3.7
    +* Platform: e.g GNU/Linux (distribution), Windows (language settings), OS X, conda, FreeBSD
    +* Did you also try this on another platform? Does it work there?
    +
    +
    +* try the latest development version, using the following command:
    +
    +```shell
    +pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
    +```
    +
    +* follow *all* the instructions in our "If Things Go Wrong" Guide
    +  (https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong) and
    +
    +### Make sure [everything is packaged correctly](https://github.com/pyinstaller/pyinstaller/wiki/How-to-Report-Bugs#make-sure-everything-is-packaged-correctly)
    +
    +  * [ ] start with celan installation
    +  * [ ] use the latest development version
    +  * [ ] Run your frozen program **from a command window (shell)** — instead of double-clicking on it
    +  * [ ] Package your program in **--onedir mode**
    +  * [ ] Package **without UPX**, say: use the option `--noupx` or set `upx=False` in your .spec-file
    +  * [ ] Repackage you application in **verbose/debug mode**. For this, pass the option `--debug` to `pyi-makespec` or `pyinstaller` or use `EXE(..., debug=1, ...)` in your .spec file.
    +
    +
    +### A minimal example program which shows the error
    +
    +```
    +(paste text here)
    +“Minimal“ means: remove everything from your code which is not relevant for this bug,
    +esp. don't use external programs, remote requests, etc.
    +A very good example is https://gist.github.com/ronen/024cdae9ff2d50488438. This one helped
    +us reproducing and fixing a quite complex problem within approx 1 hour.
    +```
    +
    +### Stacktrace / full error message
    +
    +```
    +(paste text here)
    +```
    +
    +Please also see <https://github.com/pyinstaller/pyinstaller/wiki/How-to-Report-Bugs>
    +for more about what would use to solve the issue.
    
  • .github/ISSUE_TEMPLATE/feature_request.md+30 0 added
    @@ -0,0 +1,30 @@
    +---
    +name: Feature request
    +about: Suggest an idea to improve PyInstaller
    +title: ''
    +labels: feature
    +assignees: ''
    +
    +---
    +
    +<!--
    +Welcome to the PyInstaller issue tracker! Before creating an issue, please heed the following:
    +
    +1. This tracker should only be used to report bugs and request features / enhancements to PyInstaller
    +    - For questions and general support, use the mailing list, see
    +	  <http://www.pyinstaller.org/support.html#mailing-list>
    +2. Use the search function before creating a new issue. Duplicates will be closed and directed to
    +   the original discussion.
    +-->
    +
    +**Is your feature request related to a problem? Please describe.**
    +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
    +
    +**Describe the solution you'd like**
    +A clear and concise description of what you want to happen.
    +
    +**Describe alternatives you've considered**
    +A clear and concise description of any alternative solutions or features you've considered.
    +
    +**Additional context**
    +Add any other context or screenshots about the feature request here.
    
  • .github/ISSUE_TEMPLATE.md+0 27 removed
    @@ -1,27 +0,0 @@
    -If you have problems to get your application running, please first
    -
    -* try the latest development version, using the following command:
    -
    -```shell
    -pip install https://github.com/pyinstaller/pyinstaller/archive/develop.zip
    -```
    -
    -* follow *all* the instructions in our "If Things Go Wrong" Guide
    -  (https://github.com/pyinstaller/pyinstaller/wiki/If-Things-Go-Wrong) and
    -
    -* make sure everything is packaged correctly
    -  https://github.com/pyinstaller/pyinstaller/wiki/How-to-Report-Bugs#make-sure-everything-is-packaged-correctly
    -
    -If your problem persists, please provide all information as stated in our "How to Report Bugs" guide.
    -https://github.com/pyinstaller/pyinstaller/wiki/How-to-Report-Bugs.
    -The help for GitHub's text-editor is hidden behind "Styling with Markdown is
    -supported" just below the edit-box.
    -
    -
    -**Otherwise we will not be willing to help you.**
    -
    -Please be aware that PyInstaller is a voluntary project. We spent quite some time
    -writing these guides to make both of our lives easier. Please
    -understand that we are not willing to spend our spare time to help you if you
    -are not willing to help on your side. (Sorry for having to said this, but we
    -are tired of being asked the same questions over and over again.)
    
  • .github/ISSUE_TEMPLATE/question-about-using-pyinstaller.md+12 0 added
    @@ -0,0 +1,12 @@
    +---
    +name: Question about using PyInstaller
    +about: This is not the appropriate channel
    +title: ''
    +labels: kind:support
    +assignees: ''
    +
    +---
    +
    +Please use the mailing list see <http://www.pyinstaller.org/support.html#mailing-list> for details.
    +
    +Posts that are not a bug report or a feature/enhancement request will not be addressed on this issue tracker, but closed.
    
  • .github/SECURITY.md+5 0 added
    @@ -0,0 +1,5 @@
    +## Security contact information
    +
    +To report a security vulnerability, please use the
    +[Tidelift security contact](https://tidelift.com/security).
    +Tidelift will coordinate the fix and disclosure.
    
  • PyInstaller/archive/pyz_crypto.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     import os
    
  • PyInstaller/archive/readers.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/archive/writers.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/bootloader/Darwin-64bit/run+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/run_d+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/runw+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/runw_d+0 0 modified
  • PyInstaller/bootloader/Linux-32bit/run+0 0 modified
  • PyInstaller/bootloader/Linux-32bit/run_d+0 0 modified
  • PyInstaller/bootloader/Linux-64bit/run+0 0 modified
  • PyInstaller/bootloader/Linux-64bit/run_d+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/run_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/run.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/runw_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/runw.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/run_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/run.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/runw_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/runw.exe+0 0 modified
  • PyInstaller/building/api.py+18 8 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -230,9 +232,7 @@ def assemble(self):
                     # file is contained within python egg, it is added with the egg
                     continue
                 if typ in ('BINARY', 'EXTENSION', 'DEPENDENCY'):
    -                if self.exclude_binaries and typ != 'DEPENDENCY':
    -                    self.dependencies.append((inm, fnm, typ))
    -                else:
    +                if not self.exclude_binaries:
                         if typ == 'BINARY':
                             # Avoid importing the same binary extension twice. This might
                             # happen if they come from different sources (eg. once from
    @@ -424,7 +424,8 @@ def __init__(self, *args, **kwargs):
                                      "", "OPTION"))
     
                 if self.versrsrc:
    -                if not os.path.isabs(self.versrsrc):
    +                if (not isinstance(self.versrsrc, versioninfo.VSVersionInfo)
    +                    and not os.path.isabs(self.versrsrc)):
                         # relative version-info path is relative to spec file
                         self.versrsrc = os.path.join(
                             CONF['specpath'], self.versrsrc)
    @@ -527,7 +528,11 @@ def assemble(self):
     
     
             if is_win and (self.icon or self.versrsrc or self.resources):
    -            tmpnm = tempfile.mktemp()
    +            fd, tmpnm = tempfile.mkstemp(prefix=os.path.basename(exe) + ".",
    +                                         dir=CONF['workpath'])
    +            # need to close the file, otherwise copying resources will fail
    +            # with "the file [...] is being used by another process"
    +            os.close(fd)
                 self._copyfile(exe, tmpnm)
                 os.chmod(tmpnm, 0o755)
                 if self.icon:
    @@ -718,6 +723,11 @@ def assemble(self):
                 todir = os.path.dirname(tofnm)
                 if not os.path.exists(todir):
                     os.makedirs(todir)
    +            elif not os.path.isdir(todir):
    +                raise SystemExit(
    +                    "Pyinstaller needs to make a directory, but there "
    +                    "already is a file at that path. "
    +                    "The file at issue is {!r}".format(todir))
                 if typ in ('EXTENSION', 'BINARY'):
                     fnm = checkCache(fnm, strip=self.strip_binaries,
                                      upx=self.upx_binaries,
    
  • PyInstaller/building/build_main.py+19 129 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from __future__ import print_function
    @@ -29,13 +31,12 @@
     from .. import compat
     from .. import log as logging
     from ..utils.misc import absnormpath, compile_py_files
    -from ..compat import is_py2, is_win, PYDYLIB_NAMES, VALID_MODULE_TYPES, \
    +from ..compat import is_py2, is_win, PYDYLIB_NAMES, \
         open_file, text_type, unicode_writer
     from ..depend import bindepend
     from ..depend.analysis import initialize_modgraph
     from .api import PYZ, EXE, COLLECT, MERGE
     from .datastruct import TOC, Target, Tree, _check_guts_eq
    -from .imphook import AdditionalFilesCache, ModuleHookCache
     from .osx import BUNDLE
     from .toc_conversion import DependencyProcessor
     from .utils import _check_guts_toc_mtime, format_binaries_and_datas
    @@ -65,7 +66,7 @@
     
     This file lists modules PyInstaller was not able to find. This does not
     necessarily mean this module is required for running you program. Python and
    -Python 3rd-party packages include a lot of conditional or optional module. For
    +Python 3rd-party packages include a lot of conditional or optional modules. For
     example the module 'ntpath' only exists on Windows, whereas the module
     'posixpath' only exists on Posix systems.
     
    @@ -336,17 +337,10 @@ def assemble(self):
             """
             from ..config import CONF
     
    -        # Either instantiate a ModuleGraph object or for tests reuse
    -        # dependency graph already created.
    -        # Do not reuse dependency graph when option --exclude-module was used.
    -        if 'tests_modgraph' in CONF and not self.excludes:
    -            logger.info('Reusing basic module graph object.')
    -            self.graph = CONF['tests_modgraph']
    -        else:
    -            for m in self.excludes:
    -                logger.debug("Excluding module '%s'" % m)
    -            self.graph = initialize_modgraph(
    -                excludes=self.excludes, user_hook_dirs=self.hookspath)
    +        for m in self.excludes:
    +            logger.debug("Excluding module '%s'" % m)
    +        self.graph = initialize_modgraph(
    +            excludes=self.excludes, user_hook_dirs=self.hookspath)
     
             # TODO Find a better place where to put 'base_library.zip' and when to created it.
             # For Python 3 it is necessary to create file 'base_library.zip'
    @@ -366,10 +360,6 @@ def assemble(self):
             self.graph.path = self.pathex + self.graph.path
             self.graph.set_setuptools_nspackages()
     
    -        # Analyze the script's hidden imports (named on the command line)
    -        self.graph.add_hiddenimports(self.hiddenimports)
    -
    -
             logger.info("running Analysis %s", self.tocbasename)
             # Get paths to Python and, in Windows, the manifest.
             python = sys.executable
    @@ -406,25 +396,6 @@ def assemble(self):
             if is_win:
                 depmanifest.writeprettyxml()
     
    -
    -        #FIXME: For simplicity, move the following hook caching into a new
    -        #PyiModuleGraph.cache_module_hooks() method and have the current
    -        #"PyiModuleGraph" instance own the current "ModuleHookCache" instance.
    -
    -        ### Hook cache.
    -        logger.info('Caching module hooks...')
    -
    -        # List of all directories containing hook scripts. Default hooks are
    -        # listed before and hence take precedence over custom hooks.
    -        module_hook_dirs = [get_importhooks_dir()]
    -        if self.hookspath:
    -            module_hook_dirs.extend(self.hookspath)
    -
    -        # Hook cache prepopulated with these lazy loadable hook scripts.
    -        module_hook_cache = ModuleHookCache(
    -            module_graph=self.graph, hook_dirs=module_hook_dirs)
    -
    -
             ### Module graph.
             #
             # Construct the module graph of import relationships between modules
    @@ -444,83 +415,15 @@ def assemble(self):
                 logger.info("Analyzing %s", script)
                 priority_scripts.append(self.graph.run_script(script))
     
    +        # Analyze the script's hidden imports (named on the command line)
    +        self.graph.add_hiddenimports(self.hiddenimports)
     
             ### Post-graph hooks.
    -        #
    -        # Run post-graph hooks for all modules imported by this user's
    -        # application. For each iteration of the infinite "while" loop below:
    -        #
    -        # 1. All hook() functions defined in cached hooks for imported modules
    -        #    are called. This may result in new modules being imported (e.g., as
    -        #    hidden imports) that were ignored earlier in the current iteration:
    -        #    if this is the case, all hook() functions defined in cached hooks
    -        #    for these modules will be called by the next iteration.
    -        # 2. All cached hooks whose hook() functions were called are removed
    -        #    from this cache. If this cache is empty, no hook() functions will
    -        #    be called by the next iteration and this loop will be terminated.
    -        # 3. If no hook() functions were called, this loop is terminated.
    -        logger.info('Loading module hooks...')
    -
    -        # Cache of all external dependencies (e.g., binaries, datas) listed in
    -        # hook scripts for imported modules.
    -        additional_files_cache = AdditionalFilesCache()
    -
    -        #FIXME: For orthogonality, move the following "while" loop into a new
    -        #PyiModuleGraph.post_graph_hooks() method. The "PyiModuleGraph" class
    -        #already handles all other hook types. Moreover, the graph node
    -        #retrieval and type checking performed below are low-level operations
    -        #best isolated into the "PyiModuleGraph" class itself.
    -
    -        # For each imported module, run this module's post-graph hooks if any.
    -        while True:
    -            # Set of the names of all imported modules whose post-graph hooks
    -            # are run by this iteration, preventing the next iteration from re-
    -            # running these hooks. If still empty at the end of this iteration,
    -            # no post-graph hooks were run; thus, this loop will be terminated.
    -            hooked_module_names = set()
    -
    -            # For each remaining hookable module and corresponding hooks...
    -            for module_name, module_hooks in module_hook_cache.items():
    -                # Graph node for this module if imported or "None" otherwise.
    -                module_node = self.graph.findNode(
    -                    module_name, create_nspkg=False)
    -
    -                # If this module has not been imported, temporarily ignore it.
    -                # This module is retained in the cache, as a subsequently run
    -                # post-graph hook could import this module as a hidden import.
    -                if module_node is None:
    -                    continue
    -
    -                # If this module is unimportable, permanently ignore it.
    -                if type(module_node).__name__ not in VALID_MODULE_TYPES:
    -                    hooked_module_names.add(module_name)
    -                    continue
    -
    -                # For each hook script for this module...
    -                for module_hook in module_hooks:
    -                    # Run this script's post-graph hook if any.
    -                    module_hook.post_graph()
    -
    -                    # Cache all external dependencies listed by this script
    -                    # after running this hook, which could add dependencies.
    -                    additional_files_cache.add(
    -                        module_name,
    -                        module_hook.binaries,
    -                        module_hook.datas)
    -
    -                # Prevent this module's hooks from being run again.
    -                hooked_module_names.add(module_name)
    -
    -            # Prevent all post-graph hooks run above from being run again by the
    -            # next iteration.
    -            module_hook_cache.remove_modules(*hooked_module_names)
    -
    -            # If no post-graph hooks were run, terminate iteration.
    -            if not hooked_module_names:
    -                break
    +        self.graph.process_post_graph_hooks()
     
             # Update 'binaries' TOC and 'datas' TOC.
    -        deps_proc = DependencyProcessor(self.graph, additional_files_cache)
    +        deps_proc = DependencyProcessor(self.graph,
    +                                        self.graph._additional_files_cache)
             self.binaries.extend(deps_proc.make_binaries_toc())
             self.datas.extend(deps_proc.make_datas_toc())
             self.zipped_data.extend(deps_proc.make_zipped_data_toc())
    @@ -647,7 +550,6 @@ def _write_graph_debug(self):
                 self.graph.graphreport(unicode_writer(fh))
                 logger.info("Graph drawing written to %s", CONF['dot-file'])
     
    -
         def _check_python_library(self, binaries):
             """
             Verify presence of the Python dynamic library in the binary dependencies.
    @@ -664,21 +566,9 @@ def _check_python_library(self, binaries):
             # Python lib not in dependencies - try to find it.
             logger.info('Python library not in binary dependencies. Doing additional searching...')
             python_lib = bindepend.get_python_library_path()
    -        if python_lib:
    -            logger.debug('Adding Python library to binary dependencies')
    -            binaries.append((os.path.basename(python_lib), python_lib, 'BINARY'))
    -            logger.info('Using Python library %s', python_lib)
    -        else:
    -            msg = """Python library not found: %s
    -This would mean your Python installation doesn't come with proper library files.
    -This usually happens by missing development package, or unsuitable build parameters of Python installation.
    -
    -* On Debian/Ubuntu, you would need to install Python development packages
    -  * apt-get install python3-dev
    -  * apt-get install python-dev
    -* If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
    -""" % (", ".join(PYDYLIB_NAMES),)
    -            raise IOError(msg)
    +        logger.debug('Adding Python library to binary dependencies')
    +        binaries.append((os.path.basename(python_lib), python_lib, 'BINARY'))
    +        logger.info('Using Python library %s', python_lib)
     
     
     class ExecutableBuilder(object):
    
  • PyInstaller/building/datastruct.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/building/makespec.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/building/osx.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     import os
    
  • PyInstaller/building/templates.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/building/toc_conversion.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     import os
    
  • PyInstaller/building/utils.py+12 6 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -428,6 +430,8 @@ def _rmtree(path):
                              '-y option (remove output directory without '
                              'confirmation).' % path)
         if choice.strip().lower() == 'y':
    +        print("On your own risk, you can use the option `--noconfirm` "
    +              "to get rid of this question.")
             logger.info('Removing dir %s', path)
             shutil.rmtree(path)
         else:
    @@ -574,7 +578,7 @@ def _load_code(modname, filename):
         importer = pkgutil.get_importer(path_item)
         package, _, modname = modname.rpartition('.')
     
    -    if sys.version_info >= (3, 3) and hasattr(importer, 'find_loader'):
    +    if hasattr(importer, 'find_loader'):
             loader, portions = importer.find_loader(modname)
         else:
             loader = importer.find_module(modname)
    @@ -655,8 +659,10 @@ def strip_paths_in_code(co, new_filename=None):
             for const_co in co.co_consts
         )
     
    -    # co_kwonlyargcount added in some version of Python 3
    -    if hasattr(co, 'co_kwonlyargcount'):
    +    if hasattr(co, 'replace'): # is_py38
    +        return co.replace(co_consts=consts, co_filename=new_filename)
    +    elif hasattr(co, 'co_kwonlyargcount'):
    +        # co_kwonlyargcount was added in some version of Python 3
             return code_func(co.co_argcount, co.co_kwonlyargcount, co.co_nlocals, co.co_stacksize,
                          co.co_flags, co.co_code, consts, co.co_names,
                          co.co_varnames, new_filename, co.co_name,
    
  • PyInstaller/compat.py+15 11 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -31,8 +33,8 @@
     is_64bits = sys.maxsize > 2**32
     # Distinguish specific code for various Python versions.
     is_py27 = sys.version_info >= (2, 7) and sys.version_info < (3, 0)
    -# PyInstaller supports only Python 3.4+
     # Variables 'is_pyXY' mean that Python X.Y and up is supported.
    +# Keep even unsupported versions here to keep 3rd-party hooks working.
     is_py35 = sys.version_info >= (3, 5)
     is_py36 = sys.version_info >= (3, 6)
     is_py37 = sys.version_info >= (3, 7)
    @@ -47,13 +49,14 @@
     is_solar = sys.platform.startswith('sun')  # Solaris
     is_aix = sys.platform.startswith('aix')
     is_freebsd = sys.platform.startswith('freebsd')
    +is_openbsd = sys.platform.startswith('openbsd')
     is_hpux = sys.platform.startswith('hp-ux')
     
     # Some code parts are similar to several unix platforms
     # (e.g. Linux, Solaris, AIX)
     # Mac OS X is not considered as unix since there are many
     # platform specific details for Mac in PyInstaller.
    -is_unix = is_linux or is_solar or is_aix or is_freebsd or is_hpux
    +is_unix = is_linux or is_solar or is_aix or is_freebsd or is_hpux or is_openbsd
     
     
     # On different platforms is different file for dynamic python library.
    @@ -79,6 +82,9 @@
                          'libpython%d.%dm.so.1' % _pyver,
                          'libpython%d.%d.so.1.0' % _pyver,
                          'libpython%d.%dm.so.1.0' % _pyver}
    +elif is_openbsd:
    +    PYDYLIB_NAMES = {'libpython%d.%d.so.0.0' % _pyver,
    +                     'libpython%d.%dm.so.0.0' % _pyver}
     elif is_hpux:
         PYDYLIB_NAMES = {'libpython%d.%d.so' % _pyver}
     elif is_unix:
    @@ -141,10 +147,8 @@ def __getattr__(self, name):
     
     # Python 3 moved collections classes to more sensible packages.
     if is_py2:
    -    from UserDict import UserDict
         from collections import Sequence, Set
     else:
    -    from collections import UserDict
         from collections.abc import Sequence, Set
     
     # In Python 3 built-in function raw_input() was renamed to just 'input()'.
    @@ -221,7 +225,7 @@ def __getattr__(self, name):
     
     # List of suffixes for Python C extension modules.
     try:
    -    # In Python 3.4+ There is a list
    +    # In Python 3.3+ there is a list
         from importlib.machinery import EXTENSION_SUFFIXES, all_suffixes
         ALL_SUFFIXES = all_suffixes()
     except ImportError:
    @@ -836,7 +840,7 @@ class FileNotFoundError(OSError):
         'warnings',
     }
     
    -if sys.version_info >= (3, 4):
    +if is_py3:
         PY3_BASE_MODULES.update({
             '_bootlocale',
             '_collections_abc',
    @@ -926,8 +930,8 @@ def check_requirements():
         Fail hard if any requirement is not met.
         """
         # Fail hard if Python does not have minimum required version
    -    if sys.version_info < (3, 4) and sys.version_info[:2] != (2, 7):
    -        raise SystemExit('PyInstaller requires at least Python 2.7 or 3.4+.')
    +    if sys.version_info < (3, 5) and sys.version_info[:2] != (2, 7):
    +        raise SystemExit('PyInstaller requires at least Python 2.7 or 3.5+.')
     
     
     if not is_py3:
    
  • PyInstaller/config.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/configure.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/depend/analysis.py+194 62 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    @@ -39,12 +41,14 @@
     import sys
     import traceback
     
    +from copy import deepcopy
    +
     from .. import HOMEPATH, configure
     from .. import log as logging
     from ..log import INFO, DEBUG, TRACE
     from ..building.datastruct import TOC
    -from ..building.imphook import HooksCache
    -from ..building.imphookapi import PreSafeImportModuleAPI, PreFindModulePathAPI
    +from .imphook import AdditionalFilesCache, ModuleHookCache
    +from .imphookapi import PreSafeImportModuleAPI, PreFindModulePathAPI
     from ..compat import importlib_load_source, is_py2, PY3_BASE_MODULES,\
             PURE_PYTHON_MODULE_TYPES, BINARY_MODULE_TYPES, VALID_MODULE_TYPES, \
             BAD_MODULE_TYPES, MODULE_TYPES_TO_TOC_DICT
    @@ -71,41 +75,65 @@ class PyiModuleGraph(ModuleGraph):
     
         Attributes
         ----------
    -    _hooks_pre_find_module_path : HooksCache
    +    _hooks : ModuleHookCache
    +        Dictionary mapping the fully-qualified names of all modules with
    +        normal (post-graph) hooks to the absolute paths of such hooks. See the
    +        the `_find_module_path()` method for details.
    +    _hooks_pre_find_module_path : ModuleHookCache
             Dictionary mapping the fully-qualified names of all modules with
             pre-find module path hooks to the absolute paths of such hooks. See the
             the `_find_module_path()` method for details.
    -    _hooks_pre_safe_import_module : HooksCache
    +    _hooks_pre_safe_import_module : ModuleHookCache
             Dictionary mapping the fully-qualified names of all modules with
             pre-safe import module hooks to the absolute paths of such hooks. See
             the `_safe_import_module()` method for details.
         _user_hook_dirs : list
             List of the absolute paths of all directories containing user-defined
             hooks for the current application.
    +    _excludes : list
    +        List of module names to be excluded when searching for dependencies.
    +    _additional_files_cache : AdditionalFilesCache
    +        Cache of all external dependencies (e.g., binaries, datas) listed in
    +        hook scripts for imported modules.
    +    _base_modules: list
    +        Dependencies for `base_library.zip` (which remain the same for every
    +        executable).
         """
     
         # Note: these levels are completely arbitrary and may be adjusted if needed.
         LOG_LEVEL_MAPPING = {0: INFO, 1: DEBUG, 2: TRACE, 3: TRACE, 4: TRACE}
     
    -    def __init__(self, pyi_homepath, user_hook_dirs=None, *args, **kwargs):
    -        super(PyiModuleGraph, self).__init__(*args, **kwargs)
    +    def __init__(self, pyi_homepath, user_hook_dirs=(), excludes=(), **kwargs):
    +        super(PyiModuleGraph, self).__init__(excludes=excludes, **kwargs)
             # Homepath to the place where is PyInstaller located.
             self._homepath = pyi_homepath
             # modulegraph Node for the main python script that is analyzed
             # by PyInstaller.
             self._top_script_node = None
     
             # Absolute paths of all user-defined hook directories.
    -        self._user_hook_dirs = \
    -            user_hook_dirs if user_hook_dirs is not None else []
    +        self._excludes = excludes
    +        self._reset(user_hook_dirs)
    +        self._analyze_base_modules()
    +        self._available_rthooks = load_py_data_struct(
    +            os.path.join(self._homepath,
    +                         'PyInstaller', 'loader', 'rthooks.dat'))
     
    -        # Hook-specific lookup tables, defined after defining "_user_hook_dirs".
    -        logger.info('Initializing module graph hooks...')
    +    def _reset(self, user_hook_dirs):
    +        """
    +        Reset for another set of scripts.
    +        This is primary required for running the test-suite.
    +        """
    +        self._top_script_node = None
    +        self._additional_files_cache = AdditionalFilesCache()
    +        self._user_hook_dirs = user_hook_dirs
    +        # Hook-specific lookup tables.
    +        # These need to reset when reusing cached PyiModuleGraph to avoid
    +        # hooks to refer to files or data from another test-case.
    +        logger.info('Caching module graph hooks...')
    +        self._hooks = self._cache_hooks("")
             self._hooks_pre_safe_import_module = self._cache_hooks('pre_safe_import_module')
             self._hooks_pre_find_module_path = self._cache_hooks('pre_find_module_path')
    -        self._available_rthooks = load_py_data_struct(
    -            os.path.join(self._homepath, 'PyInstaller', 'loader', 'rthooks.dat')
    -        )
     
         @staticmethod
         def _findCaller(*args, **kwargs):
    @@ -175,17 +203,38 @@ def _cache_hooks(self, hook_type):
     
             # Cache of such hooks.
             # logger.debug("Caching system %s hook dir %r" % (hook_type, system_hook_dir))
    -        hooks_cache = HooksCache(system_hook_dir)
    +        hook_dirs = [system_hook_dir]
             for user_hook_dir in self._user_hook_dirs:
                 # Absolute path of the user-defined subdirectory of this hook type.
    +            # If this directory exists, add it to the list to be cached.
                 user_hook_type_dir = os.path.join(user_hook_dir, hook_type)
    -
    -            # If this directory exists, cache all hooks in this directory.
                 if os.path.isdir(user_hook_type_dir):
                     # logger.debug("Caching user %s hook dir %r" % (hook_type, hooks_user_dir))
    -                hooks_cache.add_custom_paths([user_hook_type_dir])
    +                hook_dirs.append(user_hook_type_dir)
    +
    +        return ModuleHookCache(self, hook_dirs)
    +
    +
    +    def _analyze_base_modules(self):
    +        """
    +        Analyze dependencies of the the modules in base_library.zip.
    +        """
    +        if is_py2:
    +            self._base_modules = ()
    +            return
    +        logger.info('Analyzing base_library.zip ...')
    +        required_mods = []
    +        # Collect submodules from required modules in base_library.zip.
    +        for m in PY3_BASE_MODULES:
    +            if is_package(m):
    +                required_mods += collect_submodules(m)
    +            else:
    +                required_mods.append(m)
    +        # Initialize ModuleGraph.
    +        self._base_modules = [mod
    +            for req in required_mods
    +            for mod in self.import_hook(req)]
     
    -        return hooks_cache
     
         def run_script(self, pathname, caller=None):
             """
    @@ -195,7 +244,6 @@ def run_script(self, pathname, caller=None):
             of unrelated trees,
             """
             if self._top_script_node is None:
    -            nodes_without_parent = [x for x in self.flatten()]
                 # Remember the node for the first script.
                 try:
                     self._top_script_node = super(PyiModuleGraph, self).run_script(pathname)
    @@ -204,10 +252,8 @@ def run_script(self, pathname, caller=None):
                     formatted_lines = traceback.format_exc().splitlines(True)
                     print(*formatted_lines[-4:], file=sys.stderr)
                     raise SystemExit(1)
    -            # Create references from top_script to current modules in graph.
    -            # These modules without parents are dependencies that are necessary
    -            # for base_library.zip.
    -            for node in nodes_without_parent:
    +            # Create references from the top script to the base_modules in graph.
    +            for node in self._base_modules:
                     self.createReference(self._top_script_node, node)
                 # Return top-level script node.
                 return self._top_script_node
    @@ -218,6 +264,70 @@ def run_script(self, pathname, caller=None):
                     caller = self._top_script_node
                 return super(PyiModuleGraph, self).run_script(pathname, caller=caller)
     
    +
    +    def process_post_graph_hooks(self):
    +        """
    +        For each imported module, run this module's post-graph hooks if any.
    +        """
    +        # For each iteration of the infinite "while" loop below:
    +        #
    +        # 1. All hook() functions defined in cached hooks for imported modules
    +        #    are called. This may result in new modules being imported (e.g., as
    +        #    hidden imports) that were ignored earlier in the current iteration:
    +        #    if this is the case, all hook() functions defined in cached hooks
    +        #    for these modules will be called by the next iteration.
    +        # 2. All cached hooks whose hook() functions were called are removed
    +        #    from this cache. If this cache is empty, no hook() functions will
    +        #    be called by the next iteration and this loop will be terminated.
    +        # 3. If no hook() functions were called, this loop is terminated.
    +        logger.info('Processing module hooks...')
    +        while True:
    +            # Set of the names of all imported modules whose post-graph hooks
    +            # are run by this iteration, preventing the next iteration from re-
    +            # running these hooks. If still empty at the end of this iteration,
    +            # no post-graph hooks were run; thus, this loop will be terminated.
    +            hooked_module_names = set()
    +
    +            # For each remaining hookable module and corresponding hooks...
    +            for module_name, module_hooks in self._hooks.items():
    +                # Graph node for this module if imported or "None" otherwise.
    +                module_node = self.findNode(
    +                    module_name, create_nspkg=False)
    +
    +                # If this module has not been imported, temporarily ignore it.
    +                # This module is retained in the cache, as a subsequently run
    +                # post-graph hook could import this module as a hidden import.
    +                if module_node is None:
    +                    continue
    +
    +                # If this module is unimportable, permanently ignore it.
    +                if type(module_node).__name__ not in VALID_MODULE_TYPES:
    +                    hooked_module_names.add(module_name)
    +                    continue
    +
    +                # For each hook script for this module...
    +                for module_hook in module_hooks:
    +                    # Run this script's post-graph hook.
    +                    module_hook.post_graph()
    +
    +                    # Cache all external dependencies listed by this script
    +                    # after running this hook, which could add dependencies.
    +                    self._additional_files_cache.add(
    +                        module_name,
    +                        module_hook.binaries,
    +                        module_hook.datas)
    +
    +                # Prevent this module's hooks from being run again.
    +                hooked_module_names.add(module_name)
    +
    +            # Prevent all post-graph hooks run above from being run again by the
    +            # next iteration.
    +            self._hooks.remove_modules(*hooked_module_names)
    +
    +            # If no post-graph hooks were run, terminate iteration.
    +            if not hooked_module_names:
    +                break
    +
         def _safe_import_module(self, module_basename, module_name, parent_package):
             """
             Create a new graph node for the module with the passed name under the
    @@ -240,11 +350,12 @@ def _safe_import_module(self, module_basename, module_name, parent_package):
             # If this module has pre-safe import module hooks, run these first.
             if module_name in self._hooks_pre_safe_import_module:
                 # For the absolute path of each such hook...
    -            for hook_file in self._hooks_pre_safe_import_module[module_name]:
    +            for hook in self._hooks_pre_safe_import_module[module_name]:
                     # Dynamically import this hook as a fabricated module.
                     logger.info('Processing pre-safe import module hook   %s', module_name)
                     hook_module_name = 'PyInstaller_hooks_pre_safe_import_module_' + module_name.replace('.', '_')
    -                hook_module = importlib_load_source(hook_module_name, hook_file)
    +                hook_module = importlib_load_source(hook_module_name,
    +                                                    hook.hook_filename)
     
                     # Object communicating changes made by this hook back to us.
                     hook_api = PreSafeImportModuleAPI(
    @@ -286,11 +397,12 @@ def _find_module_path(self, fullname, module_name, search_dirs):
             # If this module has pre-find module path hooks, run these first.
             if fullname in self._hooks_pre_find_module_path:
                 # For the absolute path of each such hook...
    -            for hook_file in self._hooks_pre_find_module_path[fullname]:
    +            for hook in self._hooks_pre_find_module_path[fullname]:
                     # Dynamically import this hook as a fabricated module.
                     logger.info('Processing pre-find module path hook   %s', fullname)
                     hook_fullname = 'PyInstaller_hooks_pre_find_module_path_' + fullname.replace('.', '_')
    -                hook_module = importlib_load_source(hook_fullname, hook_file)
    +                hook_module = importlib_load_source(hook_fullname,
    +                                                    hook.hook_filename)
     
                     # Object communicating changes made by this hook back to us.
                     hook_api = PreFindModulePathAPI(
    @@ -520,18 +632,26 @@ def add_hiddenimports(self, module_list):
             Add hidden imports that are either supplied as CLI option --hidden-import=MODULENAME
             or as dependencies from some PyInstaller features when enabled (e.g. crypto feature).
             """
    +        assert self._top_script_node is not None
             # Analyze the script's hidden imports (named on the command line)
             for modnm in module_list:
    -            logger.debug('Hidden import: %s' % modnm)
    -            if self.findNode(modnm) is not None:
    +            node = self.findNode(modnm)
    +            if node is not None:
                     logger.debug('Hidden import %r already found', modnm)
    -                continue
    -            logger.info("Analyzing hidden import %r", modnm)
    -            # ModuleGraph throws ImportError if import not found
    -            try :
    -                node = self.import_hook(modnm)
    -            except ImportError:
    -                logger.error("Hidden import %r not found", modnm)
    +            else:
    +                logger.info("Analyzing hidden import %r", modnm)
    +                # ModuleGraph throws ImportError if import not found
    +                try:
    +                    nodes = self.import_hook(modnm)
    +                    assert len(nodes) == 1
    +                    node = nodes[0]
    +                except ImportError:
    +                    logger.error("Hidden import %r not found", modnm)
    +                    continue
    +            # Create references from the top script to the hidden import,
    +            # even if found otherwise. Don't waste time checking whether it
    +            # as actually added by this (test-) script.
    +            self.createReference(self._top_script_node, node)
     
     
         def get_co_using_ctypes(self):
    @@ -561,13 +681,11 @@ def get_co_using_ctypes(self):
             return co_dict
     
     
    -# TODO: A little odd. Couldn't we just push this functionality into the
    -# PyiModuleGraph.__init__() constructor and then construct PyiModuleGraph
    -# objects directly?
    -def initialize_modgraph(excludes=(), user_hook_dirs=None):
    +_cached_module_graph_ = None
    +
    +def initialize_modgraph(excludes=(), user_hook_dirs=()):
         """
    -    Create the module graph and, for Python 3, analyze dependencies for
    -    `base_library.zip` (which remain the same for every executable).
    +    Create the cached module graph.
     
         This function might appear weird but is necessary for speeding up
         test runtime because it allows caching basic ModuleGraph object that
    @@ -588,6 +706,23 @@ def initialize_modgraph(excludes=(), user_hook_dirs=None):
         PyiModuleGraph
             Module graph with core dependencies.
         """
    +    # normalize parameters to ensure tuples and make camparism work
    +    user_hook_dirs = user_hook_dirs or ()
    +    excludes = excludes or ()
    +
    +    # If there is a graph cached with the same same excludes, reuse it.
    +    # See ``PyiModulegraph._reset()`` for why what is reset.
    +    # This cache is uses primary to speed up the test-suite. Fixture
    +    # `pyi_modgraph` calls this function with empty excludes, creating
    +    # a graph suitable for the huge majority of tests.
    +    global _cached_module_graph_
    +    if (_cached_module_graph_ and
    +        _cached_module_graph_._excludes == excludes):
    +        logger.info('Reusing cached module dependency graph...')
    +        graph = deepcopy(_cached_module_graph_)
    +        graph._reset(user_hook_dirs)
    +        return graph
    +
         logger.info('Initializing module dependency graph...')
     
         # Construct the initial module graph by analyzing all import statements.
    @@ -597,20 +732,19 @@ def initialize_modgraph(excludes=(), user_hook_dirs=None):
             # get_implies() are hidden imports known by modulgraph.
             implies=get_implies(),
             user_hook_dirs=user_hook_dirs,
    -    )
    +        )
    +
    +    if not _cached_module_graph_:
    +        # Only cache the first graph, see above for explanation.
    +        logger.info('Caching module dependency graph...')
    +        # cache a deep copy of the graph
    +        _cached_module_graph_ = deepcopy(graph)
    +        # Clear data which does not need to be copied from teh cached graph
    +        # since it will be reset by ``PyiModulegraph._reset()`` anyway.
    +        _cached_module_graph_._hooks = None
    +        _cached_module_graph_._hooks_pre_safe_import_module = None
    +        _cached_module_graph_._hooks_pre_find_module_path = None
     
    -    if not is_py2:
    -        logger.info('Analyzing base_library.zip ...')
    -        required_mods = []
    -        # Collect submodules from required modules in base_library.zip.
    -        for m in PY3_BASE_MODULES:
    -            if is_package(m):
    -                required_mods += collect_submodules(m)
    -            else:
    -                required_mods.append(m)
    -        # Initialize ModuleGraph.
    -        for m in required_mods:
    -            graph.import_hook(m)
         return graph
     
     
    @@ -622,7 +756,7 @@ def get_bootstrap_modules():
         # Import 'struct' modules to get real paths to module file names.
         mod_struct = __import__('struct')
         # Basic modules necessary for the bootstrap process.
    -    loader_mods = []
    +    loader_mods = TOC()
         loaderpath = os.path.join(HOMEPATH, 'PyInstaller', 'loader')
         # On some platforms (Windows, Debian/Ubuntu) '_struct' and zlib modules are
         # built-in modules (linked statically) and thus does not have attribute __file__.
    @@ -640,6 +774,4 @@ def get_bootstrap_modules():
             ('pyimod03_importers',  os.path.join(loaderpath, 'pyimod03_importers.pyc'), 'PYMODULE'),
             ('pyiboot01_bootstrap', os.path.join(loaderpath, 'pyiboot01_bootstrap.py'), 'PYSOURCE'),
         ]
    -    # TODO Why is here the call to TOC()?
    -    toc = TOC(loader_mods)
    -    return toc
    +    return loader_mods
    
  • PyInstaller/depend/bindepend.py+26 15 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    @@ -23,8 +25,8 @@
     from .. import compat
     from ..compat import (is_win, is_win_10, is_unix,
                           is_aix, is_solar, is_cygwin, is_hpux,
    -                      is_darwin, is_freebsd, is_venv, is_conda, base_prefix,
    -                      PYDYLIB_NAMES)
    +                      is_darwin, is_freebsd, is_openbsd, is_venv, is_conda,
    +                      base_prefix, PYDYLIB_NAMES)
     from . import dylib, utils
     
     from .. import log as logging
    @@ -81,11 +83,6 @@ def getfullnameof(mod, xtrapath=None):
             npth = os.path.join(p, mod)
             if os.path.exists(npth) and matchDLLArch(npth):
                 return npth
    -        # second try: lower case filename
    -        for p in epath:
    -            npth = os.path.join(p, mod.lower())
    -            if os.path.exists(npth) and matchDLLArch(npth):
    -                return npth
         return ''
     
     
    @@ -815,7 +812,7 @@ def findLibrary(name):
                     paths.append('/usr/local/lib/hpux32')
                 else:
                     paths.append('/usr/local/lib/hpux64')
    -        elif is_freebsd:
    +        elif is_freebsd or is_openbsd:
                 paths.append('/usr/local/lib')
             for path in paths:
                 libs = glob(os.path.join(path, name + '*'))
    @@ -828,7 +825,7 @@ def findLibrary(name):
             return None
     
         # Resolve the file name into the soname
    -    if is_freebsd or is_aix:
    +    if is_freebsd or is_aix or is_openbsd:
             # On FreeBSD objdump doesn't show SONAME,
             # and on AIX objdump does not exist,
             # so we just return the lib we've found
    @@ -846,7 +843,11 @@ def _get_so_name(filename):
         """
         # TODO verify that objdump works on other unixes and not Linux only.
         cmd = ["objdump", "-p", filename]
    -    m = re.search(r'\s+SONAME\s+([^\s]+)', compat.exec_command(*cmd))
    +    pattern = r'\s+SONAME\s+([^\s]+)'
    +    if is_solar:
    +        cmd = ["elfdump", "-d", filename]
    +        pattern = r'\s+SONAME\s+[^\s]+\s+([^\s]+)'
    +    m = re.search(pattern, compat.exec_command(*cmd))
         return m.group(1)
     
     
    @@ -931,8 +932,18 @@ def _find_lib_in_libdirs(*libdirs):
             if python_libname:
                 return python_libname
     
    -    # Python library NOT found. Return just None.
    -    return None
    +    # Python library NOT found. Provide helpful feedback.
    +    msg = """Python library not found: %s
    +    This would mean your Python installation doesn't come with proper library files.
    +    This usually happens by missing development package, or unsuitable build parameters of Python installation.
    +
    +    * On Debian/Ubuntu, you would need to install Python development packages
    +      * apt-get install python3-dev
    +      * apt-get install python-dev
    +    * If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin)
    +    """ % (", ".join(PYDYLIB_NAMES),)
    +    raise IOError(msg)
    +
     
     def findSystemLibrary(name):
         '''
    
  • PyInstaller/depend/dylib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/depend/imphookapi.py+7 5 renamed
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -18,9 +20,9 @@
     instance, thus modifying which modules will be frozen into the executable.
     """
     
    -from .datastruct import TOC
     from ..lib.modulegraph.modulegraph import RuntimeModule, RuntimePackage
    -from .utils import format_binaries_and_datas
    +from ..building.datastruct import TOC
    +from ..building.utils import format_binaries_and_datas
     
     
     class PreSafeImportModuleAPI(object):
    
  • PyInstaller/depend/imphook.py+17 270 renamed
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -17,16 +19,17 @@
     
     from .. import log as logging
     from ..compat import (
    -    expand_path, importlib_load_source, FileNotFoundError, UserDict,)
    +    expand_path, importlib_load_source, FileNotFoundError)
     from .imphookapi import PostGraphAPI
    -from .utils import format_binaries_and_datas
    +from ..building.utils import format_binaries_and_datas
     
     logger = logging.getLogger(__name__)
     
    +# Safety check: Hook module names need to be unique. Duplicate names might
    +# occur if the cached PyuModuleGraph has an issue.
    +HOOKS_MODULE_NAMES = set()
     
    -# Note that the "UserDict" superclass is old-style under Python 2.7! Avoid
    -# calling the super() method for this subclass.
    -class ModuleHookCache(UserDict):
    +class ModuleHookCache(dict):
         """
         Cache of lazily loadable hook script objects.
     
    @@ -79,8 +82,7 @@ def __init__(self, module_graph, hook_dirs):
                 `hook-{module_name}.py`, where `{module_name}` is the module hooked
                 by that script) to be cached.
             """
    -
    -        UserDict.__init__(self)
    +        super(ModuleHookCache, self).__init__()
     
             # To avoid circular references and hence increased memory consumption,
             # a weak rather than strong reference is stored to the passed graph.
    @@ -282,6 +284,11 @@ def __init__(self, module_graph, module_name, hook_filename,
             self.hook_module_name = (
                 hook_module_name_prefix + self.module_name.replace('.', '_'))
     
    +        # Safety check, see above
    +        global HOOKS_MODULE_NAMES
    +        assert self.hook_module_name not in HOOKS_MODULE_NAMES
    +        HOOKS_MODULE_NAMES.add(self.hook_module_name)
    +
             # Attributes subsequently defined by the _load_hook_module() method.
             self._hook_module = None
     
    @@ -554,116 +561,6 @@ def find_all_package_nodes(name):
                             "  Removing import of %s from module %s", dest, src)
     
     
    -#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    -#FIXME: This class has been obsoleted by "ModuleHookCache" and will be removed.
    -#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    -class HooksCache(dict):
    -    """
    -    Dictionary mapping from the fully-qualified names of each module hooked by
    -    at least one hook script to lists of the absolute paths of these scripts.
    -
    -    This `dict` subclass caches the list of all hooks applicable to each module,
    -    permitting Pythonic mapping, iteration, addition, and removal of such hooks.
    -    Each dictionary key is a fully-qualified module name. Each dictionary value
    -    is a list of the absolute paths of all hook scripts specific to that module,
    -    including both official PyInstaller hooks and unofficial user-defined hooks.
    -
    -    See Also
    -    ----------
    -    `_load_file_list()`
    -        For details on hook priority.
    -    """
    -    def __init__(self, hooks_dir):
    -        """
    -        Initialize this dictionary.
    -
    -        Parameters
    -        ----------
    -        hook_dir : str
    -            Absolute or relative path of the directory containing hooks with
    -            which to populate this cache. By default, this is the absolute path
    -            of the `PyInstaller/hooks` directory containing official hooks.
    -        """
    -        super(dict, self).__init__()
    -        self._load_file_list(hooks_dir)
    -
    -    def _load_file_list(self, hooks_dir):
    -        """
    -        Cache all hooks in the passed directory.
    -
    -        **Order of caching is significant** with respect to hooks for the same
    -        module, as the values of this dictionary are ordered lists. Hooks for
    -        the same module will be run in the order in which they are cached.
    -        Previously cached hooks are always preserved (rather than overidden).
    -
    -        Specifically, any hook in the passed directory having the same module
    -        name as that of a previously cached hook will be appended to the list of
    -        hooks for that module name. By default, official hooks are cached
    -        _before_ user-defined hooks. For modules with both official and
    -        user-defined hooks, this implies that the former take priority over and
    -        will be run _before_ the latter.
    -
    -        Parameters
    -        ----------
    -        hooks_dir : str
    -            Absolute or relative path of the directory containing additional
    -            hooks to be cached. For convenience, tilde and variable expansion
    -            will be applied to this path (e.g., a leading `~` will be replaced
    -            by the absolute path of the corresponding home directory).
    -        """
    -        # Perform tilde and variable expansion and validate the result.
    -        hooks_dir = expand_path(hooks_dir)
    -        if not os.path.isdir(hooks_dir):
    -            logger.error('Hook directory %r not found',
    -                         os.path.abspath(hooks_dir))
    -            return
    -
    -        # For each hook in the passed directory...
    -        hook_files = glob.glob(os.path.join(hooks_dir, 'hook-*.py'))
    -        for hook_file in hook_files:
    -            # Absolute path of this hook's script.
    -            hook_file = os.path.abspath(hook_file)
    -
    -            # Fully-qualified name of this hook's corresponding module,
    -            # constructed by removing the "hook-" prefix and ".py" suffix.
    -            module_name = os.path.basename(hook_file)[5:-3]
    -
    -            # If this module already has cached hooks, append this hook's path
    -            # to the existing list of such paths.
    -            if module_name in self:
    -                self[module_name].append(hook_file)
    -            # Else, default to a new list containing only this hook's path.
    -            else:
    -                self[module_name] = [hook_file]
    -
    -    def add_custom_paths(self, hooks_dirs):
    -        """
    -        Cache all hooks in the list of passed directories.
    -
    -        Parameters
    -        ----------
    -        hooks_dirs : list
    -            List of the absolute or relative paths of all directories containing
    -            additional hooks to be cached.
    -        """
    -        for hooks_dir in hooks_dirs:
    -            self._load_file_list(hooks_dir)
    -
    -    def remove(self, module_names):
    -        """
    -        Remove all key-value pairs whose key is a fully-qualified module name in
    -        the passed list from this dictionary.
    -
    -        Parameters
    -        ----------
    -        module_names : list
    -            List of all fully-qualified module names to be removed.
    -        """
    -        for module_name in set(module_names):  # Eliminate duplicate entries.
    -            if module_name in self:
    -                del self[module_name]
    -
    -
     class AdditionalFilesCache(object):
         """
         Cache for storing what binaries and datas were pushed by what modules
    @@ -691,153 +588,3 @@ def datas(self, modname):
             Return list of datas for given module name.
             """
             return self._datas[modname]
    -
    -
    -#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    -#FIXME: This class has been obsoleted by "ModuleHook" and will be removed.
    -#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
    -class ImportHook(object):
    -    """
    -    Class encapsulating processing of hook attributes like hiddenimports, etc.
    -    """
    -    def __init__(self, modname, hook_filename):
    -        """
    -        :param hook_filename: File name where to load hook from.
    -        """
    -        logger.info('Processing hook   %s' % os.path.basename(hook_filename))
    -        self._name = modname
    -        self._filename = hook_filename
    -        # _module represents the code of 'hook-modname.py'
    -        # Load hook from file and parse and interpret it's content.
    -        hook_modname = 'PyInstaller_hooks_' + modname.replace('.', '_')
    -        self._module = importlib_load_source(hook_modname, self._filename)
    -        # Public import hook attributes for further processing.
    -        self.binaries = set()
    -        self.datas = set()
    -
    -    # Internal methods for processing.
    -
    -    def _process_hook_function(self, mod_graph):
    -        """
    -        Call the hook function hook(mod).
    -        Function hook(mod) has to be called first because this function
    -        could update other attributes - datas, hiddenimports, etc.
    -        """
    -        # Process a `hook(hook_api)` function.
    -        hook_api = PostGraphAPI(self._name, mod_graph)
    -        self._module.hook(hook_api)
    -
    -        self.datas.update(set(hook_api._added_datas))
    -        self.binaries.update(set(hook_api._added_binaries))
    -        for item in hook_api._added_imports:
    -            self._process_one_hiddenimport(item, mod_graph)
    -        for item in hook_api._deleted_imports:
    -            # Remove the graph link between the hooked module and item.
    -            # This removes the 'item' node from the graph if no other
    -            # links go to it (no other modules import it)
    -            mod_graph.removeReference(hook_api.node, item)
    -
    -    def _process_hiddenimports(self, mod_graph):
    -        """
    -        'hiddenimports' is a list of Python module names that PyInstaller
    -        is not able detect.
    -        """
    -        # push hidden imports into the graph, as if imported from self._name
    -        for item in self._module.hiddenimports:
    -            self._process_one_hiddenimport(item, mod_graph)
    -
    -    def _process_one_hiddenimport(self, item, mod_graph):
    -        try:
    -            # Do not try to first find out if a module by that name already exist.
    -            # Rely on modulegraph to handle that properly.
    -            # Do not automatically create namespace packages if they do not exist.
    -            caller = mod_graph.findNode(self._name, create_nspkg=False)
    -            mod_graph.import_hook(item, caller=caller)
    -        except ImportError:
    -            # Print warning if a module from hiddenimport could not be found.
    -            # modulegraph raises ImporError when a module is not found.
    -            # Import hook with non-existing hiddenimport is probably a stale hook
    -            # that was not updated for a long time.
    -            logger.warning("Hidden import '%s' not found (probably old hook)",
    -                           item)
    -
    -    def _process_excludedimports(self, mod_graph):
    -        """
    -        'excludedimports' is a list of Python module names that PyInstaller
    -        should not detect as dependency of this module name.
    -
    -        So remove all import-edges from the current module (and it's
    -        submodules) to the given `excludedimports` (end their submodules).
    -        """
    -
    -        def find_all_package_nodes(name):
    -            mods = [name]
    -            name += '.'
    -            for subnode in mod_graph.nodes():
    -                if subnode.identifier.startswith(name):
    -                    mods.append(subnode.identifier)
    -            return mods
    -
    -        # Collect all submodules of this module.
    -        hooked_mods = find_all_package_nodes(self._name)
    -
    -        # Collect all dependencies and their submodules
    -        # TODO: Optimize this by using a pattern and walking the graph
    -        # only once.
    -        for item in set(self._module.excludedimports):
    -            excluded_node = mod_graph.findNode(item, create_nspkg=False)
    -            if excluded_node is None:
    -                logger.info("Import to be excluded not found: %r", item)
    -                continue
    -            logger.info("Excluding import %r", item)
    -            imports_to_remove = set(find_all_package_nodes(item))
    -
    -            # Remove references between module nodes, as though they would
    -            # not be imported from 'name'.
    -            # Note: Doing this in a nested loop is less efficient than
    -            # collecting all import to remove first, but log messages
    -            # are easier to understand since related to the "Excluding ..."
    -            # message above.
    -            for src in hooked_mods:
    -                # modules, this `src` does import
    -                references = set(n.identifier for n in mod_graph.getReferences(src))
    -                # Remove all of these imports which are also in `imports_to_remove`
    -                for dest in imports_to_remove & references:
    -                    mod_graph.removeReference(src, dest)
    -                    logger.warning("  From %s removing import %s", src, dest)
    -
    -
    -    def _process_datas(self, mod_graph):
    -        """
    -        'datas' is a list of globs of files or
    -        directories to bundle as datafiles. For each
    -        glob, a destination directory is specified.
    -        """
    -        # Find all files and interpret glob statements.
    -        self.datas.update(set(format_binaries_and_datas(self._module.datas)))
    -
    -    def _process_binaries(self, mod_graph):
    -        """
    -        'binaries' is a list of files to bundle as binaries.
    -        Binaries are special that PyInstaller will check if they
    -        might depend on other dlls (dynamic libraries).
    -        """
    -        self.binaries.update(set(format_binaries_and_datas(self._module.binaries)))
    -
    -    # Public methods
    -
    -    def update_dependencies(self, mod_graph):
    -        """
    -        Update module dependency graph with import hook attributes (hiddenimports, etc.)
    -        :param mod_graph: PyiModuleGraph object to be updated.
    -        """
    -        if hasattr(self._module, 'hook'):
    -            self._process_hook_function(mod_graph)
    -        if hasattr(self._module, 'hiddenimports'):
    -            self._process_hiddenimports(mod_graph)
    -        if hasattr(self._module, 'excludedimports'):
    -            self._process_excludedimports(mod_graph)
    -        if hasattr(self._module, 'datas'):
    -            self._process_datas(mod_graph)
    -        if hasattr(self._module, 'binaries'):
    -            self._process_binaries(mod_graph)
    
  • PyInstaller/depend/utils.py+44 19 modified
    @@ -1,11 +1,13 @@
     # -*- coding: utf-8 -*-
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -23,15 +25,21 @@
     import struct
     import zipfile
     
    +from ..exceptions import ExecCommandFailed
     from ..lib.modulegraph import util, modulegraph
     
     from .. import compat
    -from ..compat import (is_darwin, is_unix, is_freebsd, is_py2, is_py37,
    -                      BYTECODE_MAGIC, PY3_BASE_MODULES,
    -                      exec_python_rc)
    +from ..compat import (is_darwin, is_unix, is_freebsd, is_openbsd, is_py37,
    +                      BYTECODE_MAGIC, PY3_BASE_MODULES)
     from .dylib import include_library
     from .. import log as logging
     
    +try:
    +    # source_hash only exists in Python 3.7
    +    from importlib.util import source_hash as importlib_source_hash
    +except ImportError:
    +    pass
    +
     logger = logging.getLogger(__name__)
     
     
    @@ -66,12 +74,16 @@ def create_py3_base_library(libzip_filename, graph):
                             st = os.stat(mod.filename)
                             timestamp = int(st.st_mtime)
                             size = st.st_size & 0xFFFFFFFF
    -                        # Name inside a zip archive.
    +                        # Name inside the archive. The ZIP format
    +                        # specification requires forward slashes as
    +                        # directory separator.
                             # TODO use .pyo suffix if optimize flag is enabled.
                             if type(mod) is modulegraph.Package:
    -                            new_name = mod.identifier.replace('.', os.sep) + os.sep + '__init__' + '.pyc'
    +                            new_name = mod.identifier.replace('.', '/') \
    +                                + '/__init__.pyc'
                             else:
    -                            new_name = mod.identifier.replace('.', os.sep) + '.pyc'
    +                            new_name = mod.identifier.replace('.', '/') \
    +                                + '.pyc'
     
                             # Write code to a file.
                             # This code is similar to py_compile.compile().
    @@ -80,9 +92,14 @@ def create_py3_base_library(libzip_filename, graph):
                                 fc.write(BYTECODE_MAGIC)
                                 if is_py37:
                                     # Additional bitfield according to PEP 552
    -                                # zero means timestamp based
    -                                fc.write(struct.pack('<I', 0))
    -                            fc.write(struct.pack('<II', timestamp, size))
    +                                # 0b01 means hash based but don't check the hash
    +                                fc.write(struct.pack('<I', 0b01))
    +                                with open(mod.filename, 'rb') as fs:
    +                                    source_bytes = fs.read()
    +                                source_hash = importlib_source_hash(source_bytes)
    +                                fc.write(source_hash)
    +                            else:
    +                                fc.write(struct.pack('<II', timestamp, size))
                                 marshal.dump(mod.code, fc)
                                 # Use a ZipInfo to set timestamp for deterministic build
                                 info = zipfile.ZipInfo(new_name)
    @@ -345,16 +362,15 @@ def load_ldconfig_cache():
                 LDCONFIG_CACHE = {}
                 return
     
    -    if is_freebsd:
    +    if is_freebsd or is_openbsd:
             # This has a quite different format than other Unixes
             # [vagrant@freebsd-10 ~]$ ldconfig -r
             # /var/run/ld-elf.so.hints:
             #     search directories: /lib:/usr/lib:/usr/lib/compat:...
             #     0:-lgeom.5 => /lib/libgeom.so.5
             #   184:-lpython2.7.1 => /usr/local/lib/libpython2.7.so.1
    -        text = compat.exec_command(ldconfig, '-r')
    -        text = text.strip().splitlines()[2:]
    -        pattern = re.compile(r'^\s+\d+:-l(.+?)((\.\d+)+) => (\S+)')
    +        ldconfig_arg = '-r'
    +        splitlines_count = 2
             pattern = re.compile(r'^\s+\d+:-l(\S+)(\s.*)? => (\S+)')
         else:
             # Skip first line of the library list because it is just
    @@ -364,16 +380,25 @@ def load_ldconfig_cache():
             #V keši „/etc/ld.so.cache“ nalezeno knihoven: 2799
             #      libzvbi.so.0 (libc6,x86-64) => /lib64/libzvbi.so.0
             #      libzvbi-chains.so.0 (libc6,x86-64) => /lib64/libzvbi-chains.so.0
    -        text = compat.exec_command(ldconfig, '-p')
    -        text = text.strip().splitlines()[1:]
    +        ldconfig_arg = '-p'
    +        splitlines_count = 1
             pattern = re.compile(r'^\s+(\S+)(\s.*)? => (\S+)')
     
    +    try:
    +        text = compat.exec_command(ldconfig, ldconfig_arg)
    +    except ExecCommandFailed:
    +        logger.warning("Failed to execute ldconfig. Disabling LD cache.")
    +        LDCONFIG_CACHE = {}
    +        return
    +
    +    text = text.strip().splitlines()[splitlines_count:]
    +
         LDCONFIG_CACHE = {}
         for line in text:
             # :fixme: this assumes libary names do not contain whitespace
             m = pattern.match(line)
             path = m.groups()[-1]
    -        if is_freebsd:
    +        if is_freebsd or is_openbsd:
                 # Insert `.so` at the end of the lib's basename. soname
                 # and filename may have (different) trailing versions. We
                 # assume the `.so` in the filename to mark the end of the
    
  • PyInstaller/exceptions.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/fake-modules/site.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-accessible_output2.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2016-2019, PyInstaller Development Team.
    +# Copyright (c) 2016-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-adios.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-aliyunsdkcore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks import collect_data_files
     
    
  • PyInstaller/hooks/hook-amazonproduct.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-appdirs.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-appy.pod.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for appy.pod: https://pypi.python.org/pypi/appy/0.9.1
    
  • PyInstaller/hooks/hook-astroid.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # ***************************************************
    
  • PyInstaller/hooks/hook-astropy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files, collect_submodules
    
  • PyInstaller/hooks/hook-avro.py+32 0 added
    @@ -0,0 +1,32 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +"""
    +Avro is a serialization and RPC framework.
    +"""
    +
    +import os
    +from PyInstaller.utils.hooks import get_module_file_attribute
    +from PyInstaller.compat import is_py3
    +
    +
    +res_loc = os.path.dirname(get_module_file_attribute("avro"))
    +if is_py3:
    +    # see https://github.com/apache/avro/blob/master/lang/py3/setup.py
    +    datas = [
    +        # Include the version.txt file, used to set __version__
    +        (os.path.join(res_loc, "VERSION.txt"), "avro"),
    +        # The handshake schema is needed for IPC communication
    +        (os.path.join(res_loc, "HandshakeRequest.avsc"), "avro"),
    +        (os.path.join(res_loc, "HandshakeResponse.avsc"), "avro"),
    +    ]
    +else:
    +    # on python 2 everything is bundled https://github.com/apache/avro/blob/master/lang/py/setup.py
    +    datas = []
    
  • PyInstaller/hooks/hook-babel.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-bacon.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for Bacon (https://github.com/aholkner/bacon)
    
  • PyInstaller/hooks/hook-bokeh.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-boto3.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # Boto is the Amazon Web Services (AWS) SDK for Python, which allows Python
    
  • PyInstaller/hooks/hook-botocore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # Botocore is a low-level interface to a growing number of Amazon Web Services.
    
  • PyInstaller/hooks/hook-boto.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # Boto3, the next version of Boto, is now stable and recommended for general
    
  • PyInstaller/hooks/hook-BTrees.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for BTrees: https://pypi.org/project/BTrees/4.5.1/
    
  • PyInstaller/hooks/hook-certifi.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Certifi is a carefully curated collection of Root Certificates for
    
  • PyInstaller/hooks/hook-clr.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-countrycode.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-Cryptodome.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-cryptography.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-Crypto.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-cv2.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-cx_Oracle.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-cytoolz.itertoolz.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for the cytoolz package: https://pypi.python.org/pypi/cytoolz
    
  • PyInstaller/hooks/hook-dateparser.utils.strptime.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for dateparser: https://pypi.org/project/dateparser/
    
  • PyInstaller/hooks/hook-dclab.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for dclab: https://pypi.python.org/pypi/dclab
    
  • PyInstaller/hooks/hook-distorm3.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-distutils.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-django_babel.py+17 0 added
    @@ -0,0 +1,17 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +# Tested with django-babel v0.6.2.
    +# Hook for https://github.com/python-babel/django-babel
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = copy_metadata('django-babel')
    +
    
  • PyInstaller/hooks/hook-django.contrib.sessions.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.core.cache.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.core.mail.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.core.management.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.db.backends.mysql.base.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.db.backends.oracle.base.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.db.backends.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-django.template.loaders.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-dns.rdata.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-docutils.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-docx.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-dynaconf.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     hiddenimports = ['dynaconf.loaders.env_loader',
    
  • PyInstaller/hooks/hook-enchant.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-encodings.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-enzyme.parsers.ebml.core.py+25 0 added
    @@ -0,0 +1,25 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2016-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +"""
    +enzyme:
    +https://github.com/Diaoul/enzyme
    +"""
    +
    +import os
    +from PyInstaller.utils.hooks import get_package_paths
    +
    +# get path of enzyme
    +ep = get_package_paths('enzyme')
    +
    +# add the data
    +data = os.path.join(ep[1], 'parsers', 'ebml', 'specs', 'matroska.xml')
    +datas = [(data, "enzyme/parsers/ebml/specs")]
    
  • PyInstaller/hooks/hook-eth_abi.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-eth_account.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-eth_hash.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_submodules
    
  • PyInstaller/hooks/hook-eth_keyfile.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-eth_utils.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-faker.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_submodules, collect_data_files
    
  • PyInstaller/hooks/hook-flex.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # hook for https://github.com/pipermerriam/flex
    
  • PyInstaller/hooks/hook-fmpy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-gadfly.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-gevent.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_all
    
  • PyInstaller/hooks/hook-gi.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.Atk.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.cairo.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.Champlain.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject's "gi.repository.Champlain" package.
    
  • PyInstaller/hooks/hook-gi.repository.Clutter.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject's "gi.repository.Clutter" package.
    
  • PyInstaller/hooks/hook-gi.repository.GdkPixbuf.py+130 106 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject's "gi.repository.GdkPixbuf" package.
    @@ -15,7 +17,6 @@
     import subprocess
     
     from PyInstaller.config import CONF
    -from PyInstaller import compat
     from PyInstaller.compat import (
         exec_command_stdout, is_darwin, is_win, is_linux, open_file, which)
     from PyInstaller.utils.hooks import (
    @@ -26,116 +27,139 @@
     destpath = "lib/gdk-pixbuf-2.0/2.10.0/loaders"
     cachedest = "lib/gdk-pixbuf-2.0/2.10.0"
     
    -# If the "gdk-pixbuf-query-loaders" command is not in the current ${PATH}, GDK
    -# and thus GdkPixbuf is unavailable. Return with a non-fatal warning.
    +# If the "gdk-pixbuf-query-loaders" command is not in the current ${PATH}, or
    +# is not in the GI lib path, GDK and thus GdkPixbuf is unavailable. Return with
    +# a non-fatal warning.
     gdk_pixbuf_query_loaders = None
     
    -if compat.architecture == '64bit':
    -    # CentOS/Fedora package as -64
    -    cmds = ['gdk-pixbuf-query-loaders-64', 'gdk-pixbuf-query-loaders']
    -else:
    -    cmds = ['gdk-pixbuf-query-loaders']
    -
    -for cmd in cmds:
    -    gdk_pixbuf_query_loaders = which(cmd)
    -    if gdk_pixbuf_query_loaders is not None:
    -        break
    -
    -if gdk_pixbuf_query_loaders is None:
    +try:
    +    libdir = get_gi_libdir('GdkPixbuf', '2.0')
    +except ValueError:
         logger.warning(
    -        '"hook-gi.repository.GdkPixbuf" ignored, since GDK not found '
    -        '(i.e., "gdk-pixbuf-query-loaders" not in $PATH).'
    +        '"hook-gi.repository.GdkPixbuf" ignored, '
    +        'since GdkPixbuf library not found'
         )
    -# Else, GDK is available. Let's do this.
    -else:
    -    binaries, datas, hiddenimports = get_gi_typelibs('GdkPixbuf', '2.0')
    -    datas += collect_glib_translations('gdk-pixbuf')
    -
    -    libdir = get_gi_libdir('GdkPixbuf', '2.0')
    -
    -    # To add support for a new platform, add a new "elif" branch below with the
    -    # proper is_<platform>() test and glob for finding loaders on that platform.
    -    if is_win:
    -        ext = "*.dll"
    -    elif is_darwin or is_linux:
    -        ext = "*.so"
    -
    -    # If loader detection is supported on this platform, bundle all detected
    -    # loaders and an updated loader cache.
    -    if ext:
    -        loader_libs = []
    -
    -        # Bundle all found loaders with this user application.
    -        pattern = os.path.join(libdir, loaders_path, ext)
    -        for f in glob.glob(pattern):
    -            binaries.append((f, destpath))
    -            loader_libs.append(f)
    -
    -        # Sometimes the loaders are stored in a different directory from
    -        # the library (msys2)
    -        if not loader_libs:
    -            pattern = os.path.join(libdir, '..', 'lib', loaders_path, ext)
    +    libdir = None
    +
    +if libdir:
    +
    +    # Distributions either package gdk-pixbuf-query-loaders in the GI libs
    +    # directory (not on the path), or on the path with or without a -x64 suffix
    +    # depending on the architecture
    +    cmds = [
    +        os.path.join(libdir, 'gdk-pixbuf-2.0/gdk-pixbuf-query-loaders'),
    +        'gdk-pixbuf-query-loaders-64',
    +        'gdk-pixbuf-query-loaders',
    +    ]
    +
    +    for cmd in cmds:
    +        gdk_pixbuf_query_loaders = which(cmd)
    +        if gdk_pixbuf_query_loaders is not None:
    +            break
    +
    +    if gdk_pixbuf_query_loaders is None:
    +        logger.warning(
    +            '"hook-gi.repository.GdkPixbuf" ignored, since '
    +            '"gdk-pixbuf-query-loaders" is not in $PATH or gi lib dir.'
    +        )
    +
    +    # Else, GDK is available. Let's do this.
    +    else:
    +        binaries, datas, hiddenimports = get_gi_typelibs('GdkPixbuf', '2.0')
    +        datas += collect_glib_translations('gdk-pixbuf')
    +
    +        # To add support for a new platform, add a new "elif" branch below with
    +        # the proper is_<platform>() test and glob for finding loaders on that
    +        # platform.
    +        if is_win:
    +            ext = "*.dll"
    +        elif is_darwin or is_linux:
    +            ext = "*.so"
    +
    +        # If loader detection is supported on this platform, bundle all
    +        # detected loaders and an updated loader cache.
    +        if ext:
    +            loader_libs = []
    +
    +            # Bundle all found loaders with this user application.
    +            pattern = os.path.join(libdir, loaders_path, ext)
                 for f in glob.glob(pattern):
                     binaries.append((f, destpath))
                     loader_libs.append(f)
     
    -        # Filename of the loader cache to be written below.
    -        cachefile = os.path.join(CONF['workpath'], 'loaders.cache')
    -
    -        # Run the "gdk-pixbuf-query-loaders" command and capture its standard
    -        # output providing an updated loader cache; then write this output to
    -        # the loader cache bundled with this frozen application.
    -        #
    -        # On OSX we use @executable_path to specify a path relative to the
    -        # generated bundle. However, on non-Windows we need to rewrite the
    -        # loader cache because it isn't relocatable by default. See
    -        # https://bugzilla.gnome.org/show_bug.cgi?id=737523
    -        #
    -        # To make it easier to rewrite, we just always write @executable_path,
    -        # since its significantly easier to find/replace at runtime. :)
    -        #
    -        # If we need to rewrite it...
    -        if not is_win:
    -            # To permit string munging, decode the encoded bytes output by this
    -            # command (i.e., enable the "universal_newlines" option). Note that:
    +            # Sometimes the loaders are stored in a different directory from
    +            # the library (msys2)
    +            if not loader_libs:
    +                pattern = os.path.join(libdir, '..', 'lib', loaders_path, ext)
    +                for f in glob.glob(pattern):
    +                    binaries.append((f, destpath))
    +                    loader_libs.append(f)
    +
    +            # Filename of the loader cache to be written below.
    +            cachefile = os.path.join(CONF['workpath'], 'loaders.cache')
    +
    +            # Run the "gdk-pixbuf-query-loaders" command and capture its
    +            # standard output providing an updated loader cache; then write
    +            # this output to the loader cache bundled with this frozen
    +            # application.
    +            #
    +            # On OSX we use @executable_path to specify a path relative to the
    +            # generated bundle. However, on non-Windows we need to rewrite the
    +            # loader cache because it isn't relocatable by default. See
    +            # https://bugzilla.gnome.org/show_bug.cgi?id=737523
                 #
    -            # * Under Python 2.7, "cachedata" will be a decoded "unicode" object.
    -            # * Under Python 3.x, "cachedata" will be a decoded "str" object.
    +            # To make it easier to rewrite, we just always write
    +            # @executable_path, since its significantly easier to find/replace
    +            # at runtime. :)
                 #
    -            # On Fedora, the default loaders cache is /usr/lib64, but the libdir
    -            # is actually /lib64. To get around this, we pass the path to the
    -            # loader command, and it will create a cache with the right path.
    -            cachedata = exec_command_stdout(gdk_pixbuf_query_loaders,
    -                                            *loader_libs)
    -
    -            cd = []
    -            prefix = '"' + os.path.join(libdir, 'gdk-pixbuf-2.0', '2.10.0')
    -            plen = len(prefix)
    -
    -            # For each line in the updated loader cache...
    -            for line in cachedata.splitlines():
    -                if line.startswith('#'):
    -                    continue
    -                if line.startswith(prefix):
    -                    line = '"@executable_path/' + cachedest + line[plen:]
    -                cd.append(line)
    -
    -            # Rejoin these lines in a manner preserving this object's "unicode"
    -            # type under Python 2.
    -            cachedata = u'\n'.join(cd)
    -
    -            # Write the updated loader cache to this file.
    -            with open_file(cachefile, 'w') as fp:
    -                fp.write(cachedata)
    -        # Else, GdkPixbuf will do the right thing on Windows, so no changes to
    -        # the loader cache are required. For efficiency and reliability, this
    -        # command's encoded byte output is written as is without being decoded.
    +            # If we need to rewrite it...
    +            if not is_win:
    +                # To permit string munging, decode the encoded bytes output by
    +                # this command (i.e., enable the "universal_newlines" option).
    +                # Note that:
    +                #
    +                # * Under Python 2.7, "cachedata" will be a decoded "unicode"
    +                # object. * Under Python 3.x, "cachedata" will be a decoded
    +                # "str" object.
    +                #
    +                # On Fedora, the default loaders cache is /usr/lib64, but the
    +                # libdir is actually /lib64. To get around this, we pass the
    +                # path to the loader command, and it will create a cache with
    +                # the right path.
    +                cachedata = exec_command_stdout(gdk_pixbuf_query_loaders,
    +                                                *loader_libs)
    +
    +                cd = []
    +                prefix = '"' + os.path.join(libdir, 'gdk-pixbuf-2.0', '2.10.0')
    +                plen = len(prefix)
    +
    +                # For each line in the updated loader cache...
    +                for line in cachedata.splitlines():
    +                    if line.startswith('#'):
    +                        continue
    +                    if line.startswith(prefix):
    +                        line = '"@executable_path/' + cachedest + line[plen:]
    +                    cd.append(line)
    +
    +                # Rejoin these lines in a manner preserving this object's
    +                # "unicode" type under Python 2.
    +                cachedata = u'\n'.join(cd)
    +
    +                # Write the updated loader cache to this file.
    +                with open_file(cachefile, 'w') as fp:
    +                    fp.write(cachedata)
    +            # Else, GdkPixbuf will do the right thing on Windows, so no changes
    +            # to the loader cache are required. For efficiency and reliability,
    +            # this command's encoded byte output is written as is without being
    +            # decoded.
    +            else:
    +                with open_file(cachefile, 'wb') as fp:
    +                    fp.write(subprocess.check_output(gdk_pixbuf_query_loaders))
    +
    +            # Bundle this loader cache with this frozen application.
    +            datas.append((cachefile, cachedest))
    +        # Else, loader detection is unsupported on this platform.
             else:
    -            with open_file(cachefile, 'wb') as fp:
    -                fp.write(subprocess.check_output(gdk_pixbuf_query_loaders))
    -
    -        # Bundle this loader cache with this frozen application.
    -        datas.append((cachefile, cachedest))
    -    # Else, loader detection is unsupported on this platform.
    -    else:
    -        logger.warning('GdkPixbuf loader bundling unsupported on your platform.')
    +            logger.warning(
    +                'GdkPixbuf loader bundling unsupported on your platform.'
    +            )
    
  • PyInstaller/hooks/hook-gi.repository.Gdk.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.Gio.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gio https://developer.gnome.org/gio/stable/ from the GLib library https://wiki.gnome.org/Projects/GLib
    
  • PyInstaller/hooks/hook-gi.repository.GIRepository.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.GLib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for the GLib library https://wiki.gnome.org/Projects/GLib introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GModule.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for GModule https://developer.gnome.org/glib/stable/glib-Dynamic-Loading-of-Modules.html from the GLib
    
  • PyInstaller/hooks/hook-gi.repository.GObject.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for GObject https://developer.gnome.org/gobject/stable/ from the GLib
    
  • PyInstaller/hooks/hook-gi.repository.GstAudio.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GstBase.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GstPbutils.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.Gst.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GstTag.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GstVideo.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for Gst(GStreamer) http://gstreamer.freedesktop.org/ introspected through
    
  • PyInstaller/hooks/hook-gi.repository.GtkChamplain.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject's "gi.repository.GtkChamplain" package.
    
  • PyInstaller/hooks/hook-gi.repository.GtkClutter.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject's "gi.repository.GtkClutter" package.
    
  • PyInstaller/hooks/hook-gi.repository.Gtk.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.GtkSource.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2018, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-gi.repository.PangoCairo.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.Pango.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gi.repository.xlib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     Import hook for PyGObject https://wiki.gnome.org/PyGObject
    
  • PyInstaller/hooks/hook-gooey.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-google.api_core.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-google.api.py+13 0 added
    @@ -0,0 +1,13 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = copy_metadata('google-api-core')
    
  • PyInstaller/hooks/hook-google.cloud.bigquery.py+15 0 added
    @@ -0,0 +1,15 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = (copy_metadata('google-cloud-bigquery') +
    +         # the pakcage queries meta-data about ``request``
    +         copy_metadata('requests'))
    
  • PyInstaller/hooks/hook-google.cloud.kms_v1.py+17 0 added
    @@ -0,0 +1,17 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +# Client library URL: https://googleapis.dev/python/cloudkms/latest/
    +# Import Example for client library:
    +# https://cloud.google.com/kms/docs/reference/libraries#client-libraries-install-python
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = copy_metadata('google-cloud-kms')
    
  • PyInstaller/hooks/hook-google.cloud.pubsub_v1.py+13 0 added
    @@ -0,0 +1,13 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = copy_metadata('google-cloud-pubsub')
    
  • PyInstaller/hooks/hook-google.cloud.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-google.cloud.speech.py+13 0 added
    @@ -0,0 +1,13 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +from PyInstaller.utils.hooks import copy_metadata
    +datas = copy_metadata('google-cloud-speech')
    
  • PyInstaller/hooks/hook-google.cloud.storage.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-google.cloud.translate.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-gst._gst.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-gtk.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-h5py.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-httplib2.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # This is needed to bundle cacerts.txt that comes with httplib2 module
    
  • PyInstaller/hooks/hook-httplib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-idlelib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-imageio_ffmpeg.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2019, PyInstaller Development Team.
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for imageio: http://imageio.github.io/
    
  • PyInstaller/hooks/hook-imageio.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for imageio: http://imageio.github.io/
    
  • PyInstaller/hooks/hook-importlib_metadata.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2019, PyInstaller Development Team.
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-importlib_resources.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2019, PyInstaller Development Team.
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     """
     `importlib_resources` is a backport of the 3.7+ module `importlib.resources`
    
  • PyInstaller/hooks/hook-IPython.py+10 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -24,3 +26,8 @@
         excludedimports.append(modname_tkinter)
     
     datas = collect_data_files('IPython')
    +
    +# IPython imports extensions by changing to the extensions directory and using
    +# importlib.import_module, so we need to copy over the extensions as if they
    +# were data files.
    +datas += collect_data_files('IPython.extensions', include_py_files=True)
    
  • PyInstaller/hooks/hook-jedi.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for Jedi, a static analysis tool https://pypi.org/project/jedi/
    
  • PyInstaller/hooks/hook-jinja2.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-jira.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-jsonpath_rw_ext.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import copy_metadata
    
  • PyInstaller/hooks/hook-jsonschema.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # This is needed to bundle draft3.json and draft4.json files that come
    
  • PyInstaller/hooks/hook-jupyterlab.py+5 3 modified
    @@ -1,10 +1,12 @@
     # -----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     # -----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-keyring.backends.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Tested with keyring 3.7 on MacOS.
    
  • PyInstaller/hooks/hook-kinterbasdb.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-kivy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import is_module_satisfies
    
  • PyInstaller/hooks/hook-langcodes.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-lensfunpy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-lib2to3.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # This is needed to bundle lib2to3 Grammars files
    
  • PyInstaller/hooks/hook-libaudioverse.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2016-2019, PyInstaller Development Team.
    +# Copyright (c) 2016-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     """
    
  • PyInstaller/hooks/hook-llvmlite.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # A lightweight LLVM python binding for writing JIT compilers
    
  • PyInstaller/hooks/hook-logilab.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # ***************************************************
    
  • PyInstaller/hooks/hook-lxml.etree.py+6 4 modified
    @@ -1,11 +1,13 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    -hiddenimports = ['lxml._elementpath', 'gzip']
    +hiddenimports = ['lxml._elementpath', 'gzip', 'contextlib']
    
  • PyInstaller/hooks/hook-lxml.isoschematron.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-lxml.objectify.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-lz4.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     # hook for https://github.com/python-lz4/python-lz4
     
    
  • PyInstaller/hooks/hook-magic.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # hook for https://pypi.org/project/python-magic-bin
    
  • PyInstaller/hooks/hook-mako.codegen.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-markdown.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_submodules, collect_data_files
    
  • PyInstaller/hooks/hook-matplotlib.backends.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-matplotlib.numerix.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-matplotlib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-migrate.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2019, PyInstaller Development Team.
    +# Copyright (c) 2019-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     # hook for https://github.com/openstack/sqlalchemy-migrate
     # Since v0.12.0 importing migrate requires metadata to resolve __version__
    
  • PyInstaller/hooks/hook-mpl_toolkits.basemap.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-_mssql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     hiddenimports = ['uuid']
    
  • PyInstaller/hooks/hook-_mysql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-nacl.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-names.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # names: generate random names
    
  • PyInstaller/hooks/hook-nanite.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for nanite: https://pypi.python.org/pypi/nanite
    
  • PyInstaller/hooks/hook-nbconvert.py+5 3 modified
    @@ -1,10 +1,12 @@
     # -----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     # -----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files, copy_metadata
    
  • PyInstaller/hooks/hook-nbdime.py+5 3 modified
    @@ -1,10 +1,12 @@
     # -----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     # -----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-nbformat.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2018-2019, PyInstaller Development Team.
    +# Copyright (c) 2018-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-ncclient.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-netCDF4.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-nltk.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-nnpy.py+18 0 added
    @@ -0,0 +1,18 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +
    +"""
    +Hook for https://pypi.org/project/nnpy/
    +"""
    +
    +
    +hiddenimports = ['_cffi_backend']
    
  • PyInstaller/hooks/hook-notebook.py+5 3 modified
    @@ -1,10 +1,12 @@
     # -----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     # -----------------------------------------------------------------------------
     
     import os
    
  • PyInstaller/hooks/hook-numba.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # NumPy aware dynamic Python compiler using LLVM
    
  • PyInstaller/hooks/hook-numpy.core.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     # If numpy is built with MKL support it depends on a set of libraries loaded
     # at runtime. Since PyInstaller's static analysis can't find them they must be
    
  • PyInstaller/hooks/hook-numpy.py+14 7 modified
    @@ -1,10 +1,12 @@
     # -----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     # -----------------------------------------------------------------------------
     import os
     import glob
    @@ -19,8 +21,13 @@
     binaries = []
     
     # package the DLL bundle that official numpy wheels for Windows ship
    +# The DLL bundle will either be in extra-dll on windows proper
    +# and in .libs if installed on a virtualenv created from MinGW (Git-Bash
    +# for example)
     if is_win:
    -    dll_glob = os.path.join(os.path.dirname(
    -        get_module_file_attribute('numpy')), 'extra-dll', "*.dll")
    -    if glob.glob(dll_glob):
    -        binaries.append((dll_glob, "."))
    +    extra_dll_locations = ['extra-dll', '.libs']
    +    for location in extra_dll_locations:
    +        dll_glob = os.path.join(os.path.dirname(
    +            get_module_file_attribute('numpy')), location, "*.dll")
    +        if glob.glob(dll_glob):
    +            binaries.append((dll_glob, "."))
    
  • PyInstaller/hooks/hook-OpenGL_accelerate.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-OpenGL.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-openpyxl.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for the openpyxl module: https://pypi.python.org/pypi/openpyxl
    
  • PyInstaller/hooks/hook-osgeo.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-pandas.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_submodules
    
  • PyInstaller/hooks/hook-passlib.py+19 0 added
    @@ -0,0 +1,19 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +# Handlers are imported by a lazy-load proxy, based on a
    +# name-to-package mapping. Collect all handlers to ease packaging.
    +# If you want to reduce the size of your application, used
    +# `--exclude-module` to remove unused ones.
    +hiddenimports = [
    +    "passlib.handlers",
    +    "passlib.handlers.digests",
    +]
    
  • PyInstaller/hooks/hook-paste.exceptions.reporter.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-patsy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     hiddenimports = ['patsy.builtins']
    
  • PyInstaller/hooks/hook-pendulum.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files, collect_submodules
    
  • PyInstaller/hooks/hook-phonenumbers.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     #
     # Hook for the phonenumbers package: https://pypi.org/project/phonenumbers/
    
  • PyInstaller/hooks/hook-PIL.Image.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PIL.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PIL.SpiderImagePlugin.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.compat import modname_tkinter
    
  • PyInstaller/hooks/hook-pint.py+7 4 modified
    @@ -1,14 +1,17 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    -from PyInstaller.utils.hooks import collect_data_files
    +from PyInstaller.utils.hooks import collect_data_files, copy_metadata
     
     
     datas = collect_data_files('pint')
    +datas += copy_metadata('pint')
    
  • PyInstaller/hooks/hook-pinyin.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for the pinyin package: https://pypi.python.org/pypi/pinyin
    
  • PyInstaller/hooks/hook-pkg_resources.py+7 3 modified
    @@ -1,13 +1,17 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks import collect_submodules
     
     # pkg_resources keeps vendored modules in its _vendor subpackage, and does
     # sys.meta_path based import magic to expose them as pkg_resources.extern.*
     hiddenimports = collect_submodules('pkg_resources._vendor')
    +
    +excludedimports = ['__main__']
    
  • PyInstaller/hooks/hook-psychopy.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Tested on Windows 7 64bit with python 2.7.6 and PsychoPy 1.81.03
    
  • PyInstaller/hooks/hook-psycopg2.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-pubsub.core.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2015-2019, PyInstaller Development Team.
    +# Copyright (c) 2015-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Hook for PyPubSub for Python 2.7
    
  • PyInstaller/hooks/hook-pyarrow.py+23 0 added
    @@ -0,0 +1,23 @@
    +#-----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +#-----------------------------------------------------------------------------
    +
    +# Hook for https://pypi.org/project/pyarrow/
    +
    +from PyInstaller.utils.hooks import collect_data_files, collect_dynamic_libs
    +
    +hiddenimports = [
    +    "pyarrow._parquet",
    +    "pyarrow.lib",
    +    "pyarrow.compat",
    +]
    +
    +datas = collect_data_files('pyarrow')
    +binaries = collect_dynamic_libs('pyarrow')
    
  • PyInstaller/hooks/hook-pycountry.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-pycparser.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # pycparser needs two modules -- lextab.py and yacctab.py -- which it
    
  • PyInstaller/hooks/hook-pydoc.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-pyexcel-io.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-io 0.5.18:
    +# https://github.com/pyexcel/pyexcel-io
    +
    +hiddenimports = ['pyexcel_io']
    
  • PyInstaller/hooks/hook-pyexcel-ods3.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-ods3 0.5.3:
    +# https://github.com/pyexcel/pyexcel-ods3
    +
    +hiddenimports = ['pyexcel_ods3']
    
  • PyInstaller/hooks/hook-pyexcel-ods.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-ods 0.5.6:
    +# https://github.com/pyexcel/pyexcel-ods
    +
    +hiddenimports = ['pyexcel_ods']
    
  • PyInstaller/hooks/hook-pyexcel-odsr.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-io 0.5.2:
    +# https://github.com/pyexcel/pyexcel-io
    +
    +hiddenimports = ['pyexcel_odsr']
    
  • PyInstaller/hooks/hook-pyexcel.py+29 0 added
    @@ -0,0 +1,29 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel 0.5.13:
    +# https://github.com/pyexcel/pyexcel
    +
    +hiddenimports = [
    +    'pyexcel.plugins.renderers.sqlalchemy', 'pyexcel.plugins.renderers.django',
    +    'pyexcel.plugins.renderers.excel', 'pyexcel.plugins.renderers._texttable',
    +    'pyexcel.plugins.parsers.excel', 'pyexcel.plugins.parsers.sqlalchemy',
    +    'pyexcel.plugins.sources.http', 'pyexcel.plugins.sources.file_input',
    +    'pyexcel.plugins.sources.memory_input',
    +    'pyexcel.plugins.sources.file_output',
    +    'pyexcel.plugins.sources.output_to_memory',
    +    'pyexcel.plugins.sources.pydata.bookdict',
    +    'pyexcel.plugins.sources.pydata.dictsource',
    +    'pyexcel.plugins.sources.pydata.arraysource',
    +    'pyexcel.plugins.sources.pydata.records', 'pyexcel.plugins.sources.django',
    +    'pyexcel.plugins.sources.sqlalchemy', 'pyexcel.plugins.sources.querysets'
    +]
    
  • PyInstaller/hooks/hook-pyexcel-xls.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-xls 0.5.8:
    +# https://github.com/pyexcel/pyexcel-xls
    +
    +hiddenimports = ['pyexcel_xls']
    
  • PyInstaller/hooks/hook-pyexcel-xlsx.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-xlsx 0.4.2:
    +# https://github.com/pyexcel/pyexcel-xlsx
    +
    +hiddenimports = ['pyexcel_xlsx']
    
  • PyInstaller/hooks/hook-pyexcel-xlsxw.py+16 0 added
    @@ -0,0 +1,16 @@
    +# -----------------------------------------------------------------------------
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
    +#
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
    +#
    +# The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
    +# -----------------------------------------------------------------------------
    +
    +
    +# This hook was tested with pyexcel-xlsxw 0.4.2:
    +# https://github.com/pyexcel/pyexcel-xlsxw
    +
    +hiddenimports = ['pyexcel_xlsxw']
    
  • PyInstaller/hooks/hook-PyQt4.phonon.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.Qt3Support.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtAssistant.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtCore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtGui.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtHelp.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtNetwork.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtOpenGL.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.Qt.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtScript.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtSql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtSvg.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtTest.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtWebKit.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.QtXml.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.Qwt5.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PyQt4.uic.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # Because this is PyQt4.uic, note the fully qualified package name required in
    
  • PyInstaller/hooks/hook-PyQt5.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     import os
     
    
  • PyInstaller/hooks/hook-PyQt5.QtCore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtGui.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtHelp.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtMultimedia.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtNetwork.py+12 12 modified
    @@ -1,17 +1,18 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     import os.path
     
     from PyInstaller.utils.hooks import eval_statement
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies, pyqt5_library_info
     from PyInstaller.compat import is_win
    -from PyInstaller.depend.bindepend import getfullnameof
     
     # Ensure PyQt5 is importable before adding info depending on it.
     if pyqt5_library_info.version:
    @@ -22,11 +23,10 @@
             from PyQt5.QtNetwork import QSslSocket
             print(QSslSocket.supportsSsl())""")):
     
    -        rel_data_path = ['PyQt5', 'Qt', 'bin']
    -        binaries += [
    -            # Per http://doc.qt.io/qt-5/ssl.html#enabling-and-disabling-ssl-support,
    -            # the SSL libraries are dynamically loaded, implying they exist in
    -            # the system path. Include these.
    -            (getfullnameof('libeay32.dll'), os.path.join(*rel_data_path)),
    -            (getfullnameof('ssleay32.dll'), os.path.join(*rel_data_path)),
    -        ]
    +        binaries = []
    +        for dll in ('libeay32.dll', 'ssleay32.dll', 'libssl-1_1-x64.dll',
    +                    'libcrypto-1_1-x64.dllx'):
    +            dll_path = os.path.join(pyqt5_library_info.location['BinariesPath'],
    +                                    dll)
    +            if os.path.exists(dll_path):
    +                binaries.append((dll_path, '.'))
    
  • PyInstaller/hooks/hook-PyQt5.QtOpenGL.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtPrintSupport.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.Qt.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     # When PyQt5.Qt is imported it implies the import of all PyQt5 modules. See
    
  • PyInstaller/hooks/hook-PyQt5.QtQml.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     import os
     
    
  • PyInstaller/hooks/hook-PyQt5.QtQuick.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtQuickWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtScript.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtSensors.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtSerialPort.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtSql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtSvg.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtTest.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtWebEngineWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     import os
    
  • PyInstaller/hooks/hook-PyQt5.QtWebKit.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtWebKitWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.QtXml.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PyQt5.uic.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-PySide2.py+13 5 modified
    @@ -1,22 +1,30 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
    -import os.path
     
    +import os
     from PyInstaller.utils.hooks import collect_system_data_files
     from PyInstaller.utils.hooks.qt import pyside2_library_info, get_qt_binaries
    +from PyInstaller.compat import is_win
     
     hiddenimports = ['shiboken2']
     
     # Collect the ``qt.conf`` file.
    +if is_win:
    +    target_qt_conf_dir = os.curdir
    +else:
    +    target_qt_conf_dir = 'PySide2'
    +
     datas = [x for x in
              collect_system_data_files(pyside2_library_info.location['PrefixPath'],
    -                                   'PySide2')
    +                                   target_qt_conf_dir)
              if os.path.basename(x[0]) == 'qt.conf']
     
     # Collect required Qt binaries.
    
  • PyInstaller/hooks/hook-PySide2.QtCore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtGui.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtHelp.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtMultimedia.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtNetwork.py+12 12 modified
    @@ -1,18 +1,19 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     import os.path
     
     from PyInstaller.utils.hooks import eval_statement
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies, \
         pyside2_library_info
     from PyInstaller.compat import is_win
    -from PyInstaller.depend.bindepend import getfullnameof
     
     # Only proceed if PySide2 can be imported.
     if pyside2_library_info.version:
    @@ -23,11 +24,10 @@
             from PySide2.QtNetwork import QSslSocket
             print(QSslSocket.supportsSsl())""")):
     
    -        rel_data_path = ['.']
    -        binaries += [
    -            # Per http://doc.qt.io/qt-5/ssl.html#enabling-and-disabling-ssl-support,
    -            # the SSL libraries are dynamically loaded, implying they exist in
    -            # the system path. Include these.
    -            (getfullnameof('libeay32.dll'), os.path.join(*rel_data_path)),
    -            (getfullnameof('ssleay32.dll'), os.path.join(*rel_data_path)),
    -        ]
    +        binaries = []
    +        for dll in ('libeay32.dll', 'ssleay32.dll', 'libssl-1_1-x64.dll',
    +                    'libcrypto-1_1-x64.dllx'):
    +            dll_path = os.path.join(
    +                pyside2_library_info.location['BinariesPath'], dll)
    +            if os.path.exists(dll_path):
    +                binaries.append((dll_path, '.'))
    
  • PyInstaller/hooks/hook-PySide2.QtOpenGL.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtPrintSupport.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtQml.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     import os
     
    
  • PyInstaller/hooks/hook-PySide2.QtQuick.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtQuickWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtScript.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtSensors.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtSerialPort.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtSql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtSvg.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtTest.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtWebEngineWidgets.py+89 38 modified
    @@ -1,51 +1,102 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     import os
    -from PyInstaller.utils.hooks import collect_data_files, get_qmake_path
    +from PyInstaller.utils.hooks.qt import add_qt5_dependencies, \
    +    pyside2_library_info
    +from PyInstaller.utils.hooks import get_module_file_attribute, \
    +    collect_system_data_files
    +from PyInstaller.depend.bindepend import getImports
     import PyInstaller.compat as compat
     
    -hiddenimports = ['PySide2.QtCore',
    -                 'PySide2.QtGui',
    -                 'PySide2.QtNetwork',
    -                 'PySide2.QtWebChannel',
    -                 'PySide2.QtWebEngineCore',
    -                 ]
    -
    -# Find the additional files necessary for QtWebEngine.
    -datas = (collect_data_files('PySide2', True, os.path.join('Qt', 'resources')) +
    -         collect_data_files('PySide2', True, os.path.join('Qt', 'translations')) +
    -         [x for x in collect_data_files('PySide2', False, os.path.join('Qt', 'bin'))
    -          if x[0].endswith('QtWebEngineProcess.exe')])
    -
    -# Note that for QtWebEngineProcess to be able to find icudtl.dat the bundle_identifier
    -# must be set to 'org.qt-project.Qt.QtWebEngineCore'. This can be done by passing
    -# bundle_identifier='org.qt-project.Qt.QtWebEngineCore' to the BUNDLE command in
    -# the .spec file. FIXME: This is not ideal and a better solution is required.
    -qmake = get_qmake_path('5')
    -if qmake:
    -    libdir = compat.exec_command(qmake, "-query", "QT_INSTALL_LIBS").strip()
     
    -    if compat.is_darwin:
    -        binaries = [
    -            (os.path.join(libdir, 'QtWebEngineCore.framework', 'Versions', '5',
    -                          'Helpers', 'QtWebEngineProcess.app', 'Contents', 'MacOS', 'QtWebEngineProcess'),
    -             os.path.join('QtWebEngineProcess.app', 'Contents', 'MacOS'))
    -        ]
    +def get_relative_path_if_possible(actual, possible_prefix):
    +    possible_relative_path = os.path.relpath(actual, possible_prefix)
    +    if possible_relative_path.startswith(os.pardir):
    +        return actual
    +    else:
    +        return possible_relative_path
    +
    +
    +def prefix_with_path(prefix_path, *paths):
    +    if compat.is_py2:
    +        return os.path.join(*(prefix_path + list(paths)))
    +    else:
    +        return os.path.join(*prefix_path, *paths)  # noqa: E999
     
    -        resources_dir = os.path.join(libdir, 'QtWebEngineCore.framework', 'Versions', '5', 'Resources')
    +
    +# Ensure PySide2 is importable before adding info depending on it.
    +if pyside2_library_info.version:
    +    hiddenimports, binaries, datas = add_qt5_dependencies(__file__)
    +
    +    # Include the web engine process, translations, and resources.
    +    # According to https://bugreports.qt.io/browse/PYSIDE-642
    +    # there's no subdir for windows
    +    if compat.is_win:
    +        rel_data_path = ['PySide2']
    +    else:
    +        rel_data_path = ['PySide2', 'Qt']
    +
    +    pyside2_locations = pyside2_library_info.location
    +    if compat.is_darwin:
    +        # This is based on the layout of the Mac wheel from PyPi.
    +        data_path = pyside2_locations['DataPath']
    +        libraries = ['QtCore', 'QtWebEngineCore', 'QtQuick', 'QtQml',
    +                     'QtNetwork', 'QtGui', 'QtWebChannel',
    +                     'QtPositioning']
    +        for i in libraries:
    +            datas += collect_system_data_files(
    +                os.path.join(data_path, 'lib', i + '.framework'),
    +                prefix_with_path(rel_data_path, 'lib'), True)
    +        datas += [(os.path.join(data_path, 'lib', 'QtWebEngineCore.framework',
    +                                'Resources'), os.curdir)]
    +    else:
    +        locales = 'qtwebengine_locales'
    +        resources = 'resources'
             datas += [
    -            (os.path.join(resources_dir, 'icudtl.dat'), '.'),
    -            (os.path.join(resources_dir, 'qtwebengine_resources.pak'), '.'),
    -            # The distributed Info.plist has LSUIElement set to true, which prevents the
    -            # icon from appearing in the dock.
    -            (os.path.join(libdir, 'QtWebEngineCore.framework', 'Versions', '5',
    -                          'Helpers', 'QtWebEngineProcess.app', 'Contents', 'Info.plist'),
    -             os.path.join('QtWebEngineProcess.app', 'Contents'))
    +            # Gather translations needed by Chromium.
    +            (os.path.join(pyside2_locations['TranslationsPath'], locales),
    +             prefix_with_path(rel_data_path, 'translations', locales)),
    +            # Per the `docs
    +            # <https://doc.qt.io/qt-5.10/qtwebengine-deploying.html#deploying-resources>`_,
    +            # ``DataPath`` is the base directory for ``resources``.
    +            #
    +            (os.path.join(pyside2_locations['DataPath'], resources),
    +             prefix_with_path(rel_data_path, resources)),
    +            # Include the webengine process. The ``LibraryExecutablesPath``
    +            # is only valid on Windows and Linux.
    +            #
    +            (os.path.join(pyside2_locations['LibraryExecutablesPath'],
    +                          'QtWebEngineProcess*'),
    +             prefix_with_path(rel_data_path, get_relative_path_if_possible(
    +                 pyside2_locations['LibraryExecutablesPath'],
    +                 pyside2_locations['PrefixPath'] + '/')))
             ]
    +
    +    # Add Linux-specific libraries.
    +    if compat.is_linux:
    +        # The automatic library detection fails for `NSS
    +        # <https://packages.ubuntu.com/search?keywords=libnss3>`_, which is
    +        # used by QtWebEngine. In some distributions, the ``libnss``
    +        # supporting libraries are stored in a subdirectory ``nss``. Since
    +        # ``libnss`` is not statically linked to these, but dynamically loads
    +        # them, we need to search for and add them.
    +        #
    +        # First, get all libraries linked to ``PyQt5.QtWebEngineWidgets``.
    +        for imp in getImports(
    +                get_module_file_attribute('PySide2.QtWebEngineWidgets')):
    +            # Look for ``libnss3.so``.
    +            if os.path.basename(imp).startswith('libnss3.so'):
    +                # Find the location of NSS: given a ``/path/to/libnss.so``,
    +                # add ``/path/to/nss/*.so`` to get the missing NSS libraries.
    +                nss_subdir = os.path.join(os.path.dirname(imp), 'nss')
    +                if os.path.exists(nss_subdir):
    +                    binaries.append((os.path.join(nss_subdir, '*.so'), 'nss'))
    
  • PyInstaller/hooks/hook-PySide2.QtWebKit.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtWebKitWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtWidgets.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
     
    
  • PyInstaller/hooks/hook-PySide2.QtXml.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks.qt import add_qt5_dependencies
    
  • PyInstaller/hooks/hook-PySide2.Qwt5.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import eval_statement
    
  • PyInstaller/hooks/hook-PySide2.uic.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import collect_data_files
    
  • PyInstaller/hooks/hook-PySide.phonon.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import qt_plugins_binaries
    
  • PyInstaller/hooks/hook-PySide.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PySide.QtCore.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PySide.QtGui.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-PySide.QtSql.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2017-2019, PyInstaller Development Team.
    +# Copyright (c) 2017-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     from PyInstaller.utils.hooks import qt_plugins_binaries
    
  • PyInstaller/hooks/hook-_tkinter.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/hooks/hook-Xlib.py+5 3 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2014-2019, PyInstaller Development Team.
    +# Copyright (c) 2014-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    
  • PyInstaller/__init__.py+6 4 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2005-2019, PyInstaller Development Team.
    +# Copyright (c) 2005-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -20,7 +22,7 @@
     
     # Note: Keep this variable as plain string so it could be updated automatically
     #       when doing a release.
    -__version__ = '3.5'
    +__version__ = '3.6'
     
     
     # Absolute path of this package's directory. Save this early so all
    
  • PyInstaller/__main__.py+8 5 modified
    @@ -1,10 +1,12 @@
     #-----------------------------------------------------------------------------
    -# Copyright (c) 2013-2019, PyInstaller Development Team.
    +# Copyright (c) 2013-2020, PyInstaller Development Team.
     #
    -# Distributed under the terms of the GNU General Public License with exception
    -# for distributing bootloader.
    +# Distributed under the terms of the GNU General Public License (version 2
    +# or later) with exception for distributing the bootloader.
     #
     # The full license is in the file COPYING.txt, distributed with this software.
    +#
    +# SPDX-License-Identifier: (GPL-2.0-or-later WITH Bootloader-exception)
     #-----------------------------------------------------------------------------
     
     
    @@ -21,7 +23,7 @@
     from . import log as logging
     
     # note: don't import anything else until this function is run!
    -from .compat import check_requirements
    +from .compat import check_requirements, is_conda
     
     logger = logging.getLogger(__name__)
     
    @@ -99,7 +101,8 @@ def run(pyi_args=None, pyi_config=None):
             # This helps identify PyInstaller, Python and platform version
             #  when users report issues.
             logger.info('PyInstaller: %s' % __version__)
    -        logger.info('Python: %s' % platform.python_version())
    +        logger.info('Python: %s%s', platform.python_version(),
    +                    " (conda)" if is_conda else "")
             logger.info('Platform: %s' % platform.platform())
     
             # Skip creating .spec when .spec file is supplied
    
  • .pyup.yml+1 1 modified
    @@ -10,6 +10,6 @@ requirements:
           update: False
     
     pr_prefix: "Tests: Requirements:"
    -label_prs: tests/ci/pyup
    +label_prs: "area:tests/ci/pyup"
     
     branch_prefix: pyup/
    
  • .travis.yml+24 17 modified
    @@ -37,6 +37,15 @@ jobs:
           cache:
             directories:
               - $HOME/Library/Caches/pip
    +      # Define the ``before_install-osx`` `node anchor
    +      # <https://yaml.org/spec/1.2/spec.html#id2785586>`_, so the contents of
    +      # the ``script`` node can be re-used.
    +      before_install: &before_install-osx
    +        # Activate a venv to ensure we're using the correct Python interpreter.
    +        # Per http://steven.casagrande.io/articles/travis-ci-and-if-statements/,
    +        # ensure the build fails for statements in an ``if`` clause.
    +        - python3 -m venv venv
    +        - source venv/bin/activate
           script: &script-test-pyinstaller
             # -n 3
             #   Run tests and speed them up by sending them to multiple CPUs.
    @@ -58,6 +67,10 @@ jobs:
           cache:
             directories:
               - $HOME/Library/Caches/pip
    +      # Insert the earlier defined ``before_install-osx`` node anchor contents
    +      # by referencing it with an `alias node
    +      # <https://yaml.org/spec/1.2/spec.html#id2786196>`_.
    +      before_install: *before_install-osx
           script: &script-test-libraries
             - >
               py.test -n 3 --maxfail 3 --durations 10
    @@ -71,7 +84,14 @@ jobs:
         - &test-libraries
           stage: Test - Libraries
           python: 2.7
    -      # Run tests and speed them up by sending them to multiple CPUs.
    +      before_install:
    +        # Install OpenSSL 1.1. This fixes dynamic linking problems when PyQt5.13 tries
    +        # to link with OpenSSL 1.1 -- on Ubuntu 16 (xenial), the older OpenSSL
    +        # produces errors like ``qt.network.ssl: QSslSocket: cannot resolve
    +        # OPENSSL_init_ssl``.
    +        - sudo add-apt-repository ppa:carsten-uppenbrink-net/openssl -y
    +        - sudo apt-get update -q
    +        - sudo apt install openssl -q
           script: *script-test-libraries
     
         - &lint
    @@ -80,8 +100,8 @@ jobs:
           script:
             - >
                 if [ "$TRAVIS_PULL_REQUEST" != "false" ] ; then
    -                git fetch origin $TRAVIS_BRANCH:$TRAVIS_BRANCH --depth 1 || travis_terminate 1;
    -                flake8-diff -v -v -v $TRAVIS_BRANCH || travis_terminate 1;
    +              git fetch origin $TRAVIS_BRANCH:$TRAVIS_BRANCH --depth 1 || travis_terminate 1;
    +              flake8-diff -v -v -v $TRAVIS_BRANCH || travis_terminate 1;
                 fi
     
         - <<: *test-pyinstaller
    @@ -96,9 +116,6 @@ jobs:
         - <<: *lint
           python: 3.6
     
    -    # Building Python > 3.7 requires OpenSSL 1.0.2 (or 1.1), which is
    -    # available in xenial (16.04 LTS) only.
    -
         - <<: *test-pyinstaller
           python: 3.7
         - <<: *test-libraries
    @@ -137,16 +154,6 @@ addons:
         # Disabled, since this takes a HUGE amount of test time.
         #update: true
     
    -before_install:
    -  # Activate a venv to ensure we're using the correct Python interpreter.
    -  # Per http://steven.casagrande.io/articles/travis-ci-and-if-statements/,
    -  # ensure the build fails for statements in an ``if`` clause.
    -  - >
    -      if [[ $TRAVIS_OS_NAME == 'osx' ]]; then
    -          python3 -m venv venv || travis_terminate 1;
    -          source venv/bin/activate;
    -      fi
    -
     install:
       # Update pip.
       - python -m pip install -U pip setuptools wheel | cat
    @@ -172,7 +179,7 @@ script:
     notifications:
         irc:
             channels:
    -            - "irc.freenode.org#pyinstaller"
    +          - "irc.freenode.org#pyinstaller"
             use_notice: true
             # skip_join: true would require +n mode *not to be set on #pyinstaller
             skip_join: false
    
be948cf09547

Recompile Bootloaders for Darwin, Linux and Windows.

https://github.com/pyinstaller/pyinstallerHartmut GoebelJan 7, 2020via ghsa
16 files changed · +0 0
  • PyInstaller/bootloader/Darwin-64bit/run+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/run_d+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/runw+0 0 modified
  • PyInstaller/bootloader/Darwin-64bit/runw_d+0 0 modified
  • PyInstaller/bootloader/Linux-32bit/run+0 0 modified
  • PyInstaller/bootloader/Linux-32bit/run_d+0 0 modified
  • PyInstaller/bootloader/Linux-64bit/run+0 0 modified
  • PyInstaller/bootloader/Linux-64bit/run_d+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/run_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/run.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/runw_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-32bit/runw.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/run_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/run.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/runw_d.exe+0 0 modified
  • PyInstaller/bootloader/Windows-64bit/runw.exe+0 0 modified
42a67148b3bd

[SECURITY] Bootloader: Fix insecure directory permissions of sys._MEIPATH.

5 files changed · +51 5
  • bootloader/src/pyi_utils.c+3 3 modified
    @@ -18,7 +18,7 @@
     
     #ifdef _WIN32
         #include <windows.h>
    -    #include <direct.h>  /* _mkdir, _rmdir */
    +    #include <direct.h>  /* _rmdir */
         #include <io.h>      /* _finddata_t */
         #include <process.h> /* getpid */
         #include <signal.h>  /* signal */
    @@ -292,7 +292,7 @@ pyi_get_temp_path(char *buffer, char *runtime_tmpdir)
             /* TODO use race-free fuction - if any exists? */
             wchar_ret = _wtempnam(wchar_buffer, prefix);
     
    -        if (_wmkdir(wchar_ret) == 0) {
    +        if (pyi_win32_mkdir(wchar_ret) == 0) {
                 pyi_win32_utils_to_utf8(buffer, wchar_ret, PATH_MAX);
                 free(wchar_ret);
                 if (runtime_tmpdir != NULL) {
    @@ -584,7 +584,7 @@ pyi_open_target(const char *path, const char* name_)
             pyi_win32_utils_from_utf8(wchar_buffer, fnm, PATH_MAX);
     
             if (_wstat(wchar_buffer, &sbuf) < 0) {
    -            _wmkdir(wchar_buffer);
    +            pyi_win32_mkdir(wchar_buffer);
             }
     #else
     
    
  • bootloader/src/pyi_win32_utils.c+36 0 modified
    @@ -30,6 +30,7 @@
     #include <stdio.h>    /* _fileno */
     #include <io.h>       /* _get_osfhandle */
     #include <signal.h>   /* signal */
    +#include <sddl.h>     /* ConvertStringSecurityDescriptorToSecurityDescriptorW */
     
     /* PyInstaller headers. */
     #include "msvc_stdint.h" /* int32_t */
    @@ -571,4 +572,39 @@ pyi_win32_argv_mbcs_from_utf8_sfn(int argc, char **argv)
         return pyi_win32_argv_mbcs_from_utf8_ex(argc, argv, 1);
     }
     
    +/* Create a directory at path with restricted permissions.
    + *  The directory owner will be the only one with permissions on the created
    + *  dir. Calling this function is equivalent to callin chmod(path, 0700) on
    + *  Posix.
    + *  Returns 0 on success, -1 on error.
    + */
    +int
    +pyi_win32_mkdir(const wchar_t *path)
    +{
    +    wchar_t stringSecurityDesc[] = // ACE String :
    +        L"D:" // DACL (D) :
    +        L"(A;" // Authorize (A)
    +        L";FA;" // FILE_ALL_ACCESS (FA)
    +        L";;S-1-3-4)"; // For the current directory owner (SID: S-1-3-4)
    +        // no other permissions are granted
    +
    +    SECURITY_ATTRIBUTES securityAttr;
    +    PSECURITY_DESCRIPTOR *lpSecurityDesc;
    +    securityAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
    +    securityAttr.bInheritHandle = FALSE;
    +    lpSecurityDesc = &securityAttr.lpSecurityDescriptor;
    +
    +    if (!ConvertStringSecurityDescriptorToSecurityDescriptorW(
    +             stringSecurityDesc,
    +             SDDL_REVISION_1,
    +             lpSecurityDesc,
    +             NULL)) {
    +        return -1;
    +    }
    +    if (!CreateDirectoryW(path, &securityAttr)) {
    +        return -1;
    +    };
    +    return 0;
    +}
    +
     #endif  /* _WIN32 */
    
  • bootloader/src/pyi_win32_utils.h+2 0 modified
    @@ -36,6 +36,8 @@ char ** pyi_win32_argv_mbcs_from_utf8_ex(int argc, char **wargv, int sfn);
     char ** pyi_win32_argv_mbcs_from_utf8(int argc, char **wargv);
     char ** pyi_win32_argv_mbcs_from_utf8_sfn(int argc, char **wargv);
     
    +int pyi_win32_mkdir(const wchar_t *path);
    +
     #endif /* ifdef _WIN32 */
     
     #endif  /* UTILS_H */
    
  • bootloader/wscript+3 2 modified
    @@ -552,12 +552,13 @@ def configure(ctx):
     
         if ctx.env.DEST_OS == 'win32':
             if ctx.env.CC_NAME == 'msvc':
    -            ctx.check_libs_msvc('user32 comctl32 kernel32 ws2_32',
    +            ctx.check_libs_msvc('user32 comctl32 kernel32 advapi32 ws2_32',
                                     mandatory=True)
             else:
                 ctx.check_cc(lib='user32', mandatory=True)
                 ctx.check_cc(lib='comctl32', mandatory=True)
                 ctx.check_cc(lib='kernel32', mandatory=True)
    +            ctx.check_cc(lib='advapi32', mandatory=True)
                 ctx.check_cc(lib='ws2_32', mandatory=True)
         else:
             # Mac OS X and FreeBSD do not need libdl.
    @@ -738,7 +739,7 @@ def build(ctx):
                 source=ctx.path.ant_glob(['src/*.c', icon_rc]),
                 target=exe_name,
                 install_path=install_path,
    -            use='USER32 COMCTL32 KERNEL32 WS2_32 Z',
    +            use='USER32 COMCTL32 KERNEL32 ADVAPI32 WS2_32 Z',
                 includes='src windows zlib',
                 features=features,
             )
    
  • news/win32-vulnerability.bootloader.rst+7 0 added
    @@ -0,0 +1,7 @@
    +[SECURITY] (Win32) Fix CVE-2019-16784: Local Privilege Escalation caused by
    +insecure directory permissions of sys._MEIPATH. This security fix effects all
    +Windows software frozen by PyInstaller in "onefile" mode.
    +While PyInstaller itself was not vulnerable, all Windows software frozen
    +by PyInstaller in "onefile" mode is vulnerable. If you are using
    +PyInstaller to freeze Windows software using "onefile" mode, you should
    +upgrade PyInstaller and rebuild your software.
    

Vulnerability mechanics

Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

6

News mentions

0

No linked articles in our index yet.