Merge pull request #1865 from hylang/revamp-install
Revamp the setup script's install command
This commit is contained in:
commit
e6d6a02f0c
1
LICENSE
1
LICENSE
@ -1,4 +1,5 @@
|
|||||||
Copyright 2020 the authors.
|
Copyright 2020 the authors.
|
||||||
|
Portions of setup.py, copyright 2016 Jason R Coombs <jaraco@jaraco.com>.
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a
|
Permission is hereby granted, free of charge, to any person obtaining a
|
||||||
copy of this software and associated documentation files (the "Software"),
|
copy of this software and associated documentation files (the "Software"),
|
||||||
|
50
setup.py
50
setup.py
@ -3,7 +3,11 @@
|
|||||||
# This file is part of Hy, which is free software licensed under the Expat
|
# This file is part of Hy, which is free software licensed under the Expat
|
||||||
# license. See the LICENSE.
|
# license. See the LICENSE.
|
||||||
|
|
||||||
import sys, os
|
import glob
|
||||||
|
import importlib
|
||||||
|
import inspect
|
||||||
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from setuptools import find_packages, setup
|
from setuptools import find_packages, setup
|
||||||
from setuptools.command.install import install
|
from setuptools.command.install import install
|
||||||
@ -20,16 +24,42 @@ make things work nicer, and lets Python and the Hy lisp variant play
|
|||||||
nice together. """
|
nice together. """
|
||||||
|
|
||||||
class Install(install):
|
class Install(install):
|
||||||
|
def __compile_hy_bytecode(self):
|
||||||
|
for path in sorted(glob.iglob('hy/**.hy', recursive=True)):
|
||||||
|
importlib.util.cache_from_source(path, optimize=self.optimize)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
# Import each Hy module to ensure it's compiled.
|
# Don't bother messing around with deps if they wouldn't be installed anyway.
|
||||||
import os, importlib
|
# Code is based on setuptools's install.py.
|
||||||
for dirpath, _, filenames in sorted(os.walk("hy")):
|
if not (self.old_and_unmanageable or self.single_version_externally_managed
|
||||||
for filename in sorted(filenames):
|
or not self._called_from_setup(inspect.currentframe())):
|
||||||
if filename.endswith(".hy"):
|
easy_install = self.distribution.get_command_class('easy_install')
|
||||||
importlib.import_module(
|
|
||||||
dirpath.replace("/", ".").replace("\\", ".") +
|
cmd = easy_install(
|
||||||
"." + filename[:-len(".hy")])
|
self.distribution, args="x", root=self.root, record=self.record,
|
||||||
install.run(self)
|
)
|
||||||
|
cmd.ensure_finalized()
|
||||||
|
cmd.always_copy_from = '.'
|
||||||
|
cmd.package_index.scan(glob.glob('*.egg'))
|
||||||
|
|
||||||
|
cmd.args = self.distribution.install_requires
|
||||||
|
|
||||||
|
# Avoid deprecation warnings on new setuptools versions.
|
||||||
|
if 'show_deprecation' in inspect.signature(cmd.run).parameters:
|
||||||
|
cmd.run(show_deprecation=False)
|
||||||
|
else:
|
||||||
|
cmd.run()
|
||||||
|
|
||||||
|
# Make sure any new packages get picked up.
|
||||||
|
import site
|
||||||
|
importlib.reload(site)
|
||||||
|
importlib.invalidate_caches()
|
||||||
|
|
||||||
|
self.__compile_hy_bytecode()
|
||||||
|
|
||||||
|
# The deps won't be reinstalled because of:
|
||||||
|
# https://github.com/pypa/setuptools/issues/456
|
||||||
|
return install.run(self)
|
||||||
|
|
||||||
install_requires = [
|
install_requires = [
|
||||||
'rply>=0.7.7',
|
'rply>=0.7.7',
|
||||||
|
Loading…
Reference in New Issue
Block a user