Skip to content

Commit

Permalink
Move setup() and refactor to avoid a future circular import in Freezer (
Browse files Browse the repository at this point in the history
  • Loading branch information
marcelotduarte committed Apr 13, 2022
1 parent 3ca0dd5 commit 3aee4c2
Show file tree
Hide file tree
Showing 5 changed files with 46 additions and 53 deletions.
28 changes: 27 additions & 1 deletion cx_Freeze/__init__.py
Expand Up @@ -2,13 +2,14 @@
and is cross-platform."""
# pylint: disable=invalid-name

import setuptools # isort:skip
import sys

from .command.build import Build as build
from .command.build_exe import BuildEXE as build_exe
from .command.install import Install as install
from .command.install_exe import InstallEXE as install_exe
from .dist import setup
from .dist import Distribution
from .exception import ConfigError
from .finder import Module, ModuleFinder
from .freezer import ConstantsModule, Executable, Freezer
Expand Down Expand Up @@ -43,3 +44,28 @@
__all__.append(bdist_rpm.__name__)

__version__ = "6.11.0-dev0"


def _add_command_class(command_classes, name, cls):
if name not in command_classes:
command_classes[name] = cls


def setup(**attrs): # pylint: disable=C0116
attrs.setdefault("distclass", Distribution)
command_classes = attrs.setdefault("cmdclass", {})
if sys.platform == "win32":
_add_command_class(command_classes, "bdist_msi", bdist_msi)
elif sys.platform == "darwin":
_add_command_class(command_classes, "bdist_dmg", bdist_dmg)
_add_command_class(command_classes, "bdist_mac", bdist_mac)
else:
_add_command_class(command_classes, "bdist_rpm", bdist_rpm)
_add_command_class(command_classes, "build", build)
_add_command_class(command_classes, "build_exe", build_exe)
_add_command_class(command_classes, "install", install)
_add_command_class(command_classes, "install_exe", install_exe)
setuptools.setup(**attrs)


setup.__doc__ = setuptools.setup.__doc__
16 changes: 9 additions & 7 deletions cx_Freeze/command/build.py
Expand Up @@ -15,16 +15,18 @@
__all__ = ["Build"]


# pylint: disable=attribute-defined-outside-init,missing-function-docstring
try:
# pylint: disable-next=deprecated-module
from distutils.ccompiler import show_compilers
except ImportError:

def show_compilers():
def show_compilers():
"""List available compilers."""
try:
distutils_ccompiler = __import__(
"distutils.ccompiler", fromlist=["show_compilers"]
)
distutils_ccompiler.show_compilers()
except (ImportError, AttributeError):
print("The list of available compilers was not found.")


# pylint: disable=attribute-defined-outside-init,missing-function-docstring
class Build(Command):
"""Build everything needed to install."""

Expand Down
5 changes: 3 additions & 2 deletions cx_Freeze/command/build_exe.py
@@ -1,6 +1,5 @@
"""Implements the 'build_exe' command."""

import distutils.core # pylint: disable=W0402
import logging
import os
import sys
Expand Down Expand Up @@ -128,6 +127,7 @@ def add_to_path(self, name):
sys.path.insert(0, source_dir)

def build_extension(self, name, module_name=None):
# XXX: This method, add_to_path and set_source_location can be deleted?
if module_name is None:
module_name = name
source_dir = getattr(self, name.lower())
Expand All @@ -140,7 +140,8 @@ def build_extension(self, name, module_name=None):
script_args.append(f"--compiler={command.compiler}")
os.chdir(source_dir)
logging.info("building '%s' extension in '%s'", name, source_dir)
distribution = distutils.core.run_setup("setup.py", script_args)
distutils_core = __import__("distutils.core", fromlist=["run_setup"])
distribution = distutils_core.run_setup("setup.py", script_args)
ext_modules = distribution.ext_modules
modules = [m for m in ext_modules if m.name == module_name]
if not modules:
Expand Down
48 changes: 6 additions & 42 deletions cx_Freeze/dist.py
@@ -1,55 +1,19 @@
"""The classes and functions with which cx_Freeze extends setuptools."""

import setuptools # isort:skip
import sys
from distutils.dist import DistributionMetadata # pylint: disable=W0402

from .command.build import Build as build
from .command.build_exe import BuildEXE as build_exe
from .command.install import Install as install
from .command.install_exe import InstallEXE as install_exe
from setuptools import Distribution as _Distribution

if sys.platform == "win32":
from .command.bdist_msi import BdistMSI as bdist_msi
elif sys.platform == "darwin":
from .command.bdist_mac import BdistDMG as bdist_dmg
from .command.bdist_mac import BdistMac as bdist_mac
else:
from .command.bdist_rpm import BdistRPM as bdist_rpm
__all__ = ["Distribution", "DistributionMetadata"]

__all__ = ["Distribution", "setup"]


class Distribution(setuptools.Distribution):
class Distribution(_Distribution):
"""Distribution with support for executables."""

def __init__(self, attrs):
self.executables = []
super().__init__(attrs)

def has_executables(self): # pylint: disable=C0116
def has_executables(self):
"""Predicate for build_exe command."""
return self.executables and len(self.executables) > 0


def _add_command_class(command_classes, name, cls):
if name not in command_classes:
command_classes[name] = cls


def setup(**attrs): # pylint: disable=C0116
attrs.setdefault("distclass", Distribution)
command_classes = attrs.setdefault("cmdclass", {})
if sys.platform == "win32":
_add_command_class(command_classes, "bdist_msi", bdist_msi)
elif sys.platform == "darwin":
_add_command_class(command_classes, "bdist_dmg", bdist_dmg)
_add_command_class(command_classes, "bdist_mac", bdist_mac)
else:
_add_command_class(command_classes, "bdist_rpm", bdist_rpm)
_add_command_class(command_classes, "build", build)
_add_command_class(command_classes, "build_exe", build_exe)
_add_command_class(command_classes, "install", install)
_add_command_class(command_classes, "install_exe", install_exe)
setuptools.setup(**attrs)


setup.__doc__ = setuptools.setup.__doc__
2 changes: 1 addition & 1 deletion cx_Freeze/freezer.py
Expand Up @@ -9,7 +9,6 @@
import sysconfig
import time
from abc import abstractmethod
from distutils.dist import DistributionMetadata
from importlib.util import MAGIC_NUMBER
from pathlib import Path
from typing import List, Optional, Set, Tuple, Union
Expand All @@ -21,6 +20,7 @@
get_resource_file_path,
process_path_specs,
)
from .dist import DistributionMetadata
from .exception import ConfigError
from .executable import Executable
from .finder import ModuleFinder
Expand Down

0 comments on commit 3aee4c2

Please sign in to comment.